没有重新加载页面的通知(如facebook或google plus通知)

将Facebook中的通知发送到仪表板的理想机制是什么? 我认为最好的方法是每5秒对一个php页面进行Ajax调用并检索通知。

有没有更好的方法来做类似的改变?

它也适用于所有移动浏览器。

我是按照以下方式做的,

在jquery中使用$.post获取数据而不刷新页面。

 $.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); 

编辑2

一切正常,但是当data.txt文件没有发生变化时,我会在50秒内收到这样的错误消息。

错误:超时(超时)

怎么能防止这种情况?

REF: Javascript可变范围

据我所知,基本上有两种方法可以做到这一点:轮询和websockets。 轮询要么是间隔地发出许多请求,要么是浏览器和服务器知道很长的请求(也称为长轮询)。 然后有websockets。 我有一段时间没有在PHP的土地上,但最后我检查websockets在那里并不真正支持。 它本来可以改变。 在Node world中,socket.io是一个很好的解决方案,它使用websockets和long polling作为备份。

快速搜索已经找到这个websockets和PHP: http ://socketo.me/docs/