Какой был бы идеальный механизм для получения уведомлений, например, в Facebook на панели инструментов? Я думаю, что лучший способ – сделать вызов Ajax на php-страницу каждые 5 секунд и получить уведомления.
Есть ли лучший способ сделать аналогичные изменения?
Он должен работать и во всех мобильных браузерах.
Я делаю это следующим образом,
используйте $.post
в jquery для получения данных без обновления страницы.
$.post("page.php",{"act":1},function(data){ $("#id").html(data); }); in page.php write your query
ИЗМЕНИТЬ 1
Я написал такую функцию, ссылаясь на некоторые онлайн-заметки и свою работу в реальном времени.
var TimeStamp = null; function waitForMsg() { $.ajax({ type: "GET", url: "getData.php?timestamp=" + TimeStamp, async: true, cache: false, timeout: 50000, /* Timeout in ms */ // data: "TimeStamp=" + TimeStamp, success: function( data ) { var json = eval('(' + data + ')'); if ( json['msg'] != "" ) { alert( json['msg'] ); } TimeStamp = json['timestamp']; setTimeout( 'waitForMsg()', /* Request next message */ 1000 /* ..after 1 seconds */ ); }, error: function( XMLHttpRequest, textStatus, errorThrown ) { alert("error:" + textStatus + "(" + errorThrown + ")"); setTimeout( 'waitForMsg()', /* Try again after.. */ "15000"); /* milliseconds (15seconds) */ }, }); } ; // calling after dom is ready $(document).ready(function() { waitForMsg(); });
PHP-файл,
<?php $filename = dirname(__FILE__).'/data.txt'; $lastmodif = isset( $_GET['timestamp'] ) ? $_GET['timestamp'] : 0; $currentmodif = filemtime( $filename ); while ( $currentmodif <= $lastmodif ) { usleep( 10000 ); clearstatcache(); $currentmodif = filemtime($filename); } $response = array(); $response['msg'] = file_get_contents( $filename ); $response['timestamp'] = $currentmodif; echo json_encode($response);
EDIT 2
Все работает хорошо, но когда нет изменений в файле data.txt, я получаю сообщение об ошибке, подобное этому через 50 секунд.
ошибка: время ожидания (тайм-аут)
как это можно предотвратить?
REF: Область переменных Javascript
Из того, что я знаю, в принципе есть два способа сделать это: опрос и websockets. Опрос либо делает много запросов с интервалом, либо имеет очень длинный запрос, который браузер и сервер знают долго (также называемый длинным опросом). Затем есть websockets. Некоторое время я не был на PHP, но последний раз, когда я проверял веб-сайты, там не поддерживалось. Это могло измениться. В мире узлов socket.io – отличное решение, которое использует веб-узлы и длительный опрос в качестве резервной копии.
Быстрый поиск нашел это для websockets и php: http://socketo.me/docs/