当前位置: 首页 > 面试题库 >

通知而无需重新加载页面(例如Facebook或google plus通知)

宋飞舟
2023-03-14
问题内容

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

有没有更好的方法来进行类似的更改?

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

我正在按照以下方式进行操作,

使用$.postjQuery中为获取数据,而无需页面清爽。

$.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秒内收到一条错误消息。

错误:超时(超时)

如何预防呢?


问题答案:

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

快速搜索找到了用于websockets和php的信息:http ://socketo.me/docs/



 类似资料:
  • 问题内容: 我将如何更新每两秒钟在服务器上更新一次的映像,而无需用户按下刷新按钮,我的第一个猜测是ajax,但我之前从未真正使用过它。有人能指出我正确的方向吗? 编辑:忘记提及图像是由perl脚本生成的.gif-尝试通过url抓取它返回脚本 问题答案: 您的Perl脚本似乎有问题。尝试通过URL访问图像应该仍然返回图像。它应该返回二进制数据而不是脚本。您还应该将响应的Content- type标头

  • 问题内容: 我有一个分类广告网站,在显示广告的页面上,我正在创建“向朋友发送提示”表单… 因此,任何想要的人都可以将广告提示发送给某些朋友的电子邮件地址。 我猜该表格必须提交到php页面,对吗? 提交表单时,页面被重新加载…我不想要… 有什么办法可以使其不重新加载并仍然发送邮件?最好没有ajax或jquery … 谢谢 问题答案: 您需要提交ajax请求来发送电子邮件,而无需重新加载页面。 您的代

  • 问题内容: 我有一个分类广告网站,在显示广告的页面上,我正在创建“向朋友发送提示”表单… 因此,任何想要的人都可以将广告提示发送给某些朋友的电子邮件地址。 我猜该表格必须提交到php页面,对吗? 提交表单时,页面被重新加载…我不想要… 有什么办法可以使其不重新加载并仍然发送邮件?最好没有ajax或jquery … 谢谢 问题答案: 您需要提交ajax请求来发送电子邮件,而无需重新加载页面。 您的代

  • 问题内容: 我对jQuery不太熟悉。我正在尝试制作一个无需重新加载页面即可在后台提交的表单。 我有一个隐藏的div,它显示并隐藏单击,在div内有一个表单。 我有两个问题: 1)表单验证失败时,仍将提交表单。我试图设置验证和提交代码的状态,但无法正常工作。 2)提交表单后,div自动隐藏,因此看不到成功的消息。 这是代码: 问题答案: 不应绑定到click事件(),而应绑定到 表单的事件。 我也

  • 问题内容: 我从数据库获取数据并将其显示在div中…我要做的是单击链接时应更改div的内容 一种选择是通过URL将参数传递给自身并重新加载页面… 我需要这样做而 无需重新加载\刷新 … 目的是当我单击任何链接时,div和php变量的内容无需刷新即可更新....这样 用户可以看到新数据 ,然后如果执行某些查询,它将在新变量上 ps我知道它将需要一些AJAX,但我不知道AJAX ..所以请以我可以学习

  • 问题内容: 在我的视图中获取数据的代码如下所示: 我模板中的代码看起来像这样,效果很好。现在,问题是我希望该表每10秒更新一次其信息,而不刷新整个页面。视图的URL为/,模板的名称为home。 urls.py看起来像这样 你们谁能对此有所了解,我将不胜感激! 问题答案: 您可以使用,以及: 您的HTML JS 视图 get_more_tables.html 然后只需确保将新视图添加到您的视图中 (