0

我一直在处理 jquery/ajax 请求。我已经成功获得了一个 ajax 请求,它将从数据库中检索数据,问题是,我不断window.setInterval()地每 x 秒刷新一次这个函数。

我将如何更改它以保持 ajax 请求处于活动状态,因此它可以更新 html 内容,而不必为我的 ajax 脚本提供多个请求。

我的代码如下:

window.setInterval(function()
{
  $(function () 
  {
    $.ajax({                                      
        url: 'Ajax.php'+SearchTerm, dataType: 'json',  success: function(rows)        
        {
        $('#NumberOfVotes').empty();

            for (var i in rows)
            {
                var row = rows[i];          
                var QuestionID = row[0];
                var Votes = row[1];
                $('#NumberOfVotes')
                .append(Votes);
            } 
        } 
    });       
  });
}, 500);
4

4 回答 4

2

这在很大程度上取决于您的服务器如何能够动态更新其内容。也就是说,您正在寻找的是 websockets。Websockets 旨在取代长轮询范式。

编辑:由于您主要使用 php 作为服务器技术,请查看 Ratchet。我听说过它的好消息http://socketo.me/

这是一篇关于使用 HTML http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/的优秀文章

.NET 在 SignalR http://signalr.net/中有一个很棒的套接字库

那里有无数关于套接字的 php 文档 http://php.net/manual/en/book.sockets.php

于 2013-03-14T14:37:22.427 回答
0

考虑使用网络套接字——您可以在客户需要查找新数据时随时向他们发送消息——这样您就不会发出任何不必要的请求。尝试检查 pubnub - 服务很便宜,可以处理您需要的一切。

于 2013-03-14T14:38:35.103 回答
0

您需要一些服务器端的东西来保持请求处于活动状态,直到它有东西要返回。这通常称为“彗星”、“长轮询”或“推送”。

原理是:

  1. 您通过 AJAX 在客户端发送请求
  2. 您的服务器收到请求,但尚未返回响应。它休眠/等待,直到它有东西要返回
  3. 数据库中的新条目!您的服务器现在有一些东西要返回:它为等待请求返回一些 JSON 数据
  4. 您收到响应服务器端,显示您必须显示的内容,然后返回步骤 1 发送另一个请求。

现在,实现服务器端将取决于您使用的语言/框架。


编辑 :

一些使用 PHP 的例子:

彗星和 PHP

使用 PHP 和 jQuery 的简单 Comet 实现

于 2013-03-14T14:39:07.440 回答
0

您可以设置xhr.multipart = true和修改服务器代码。请参阅多部分响应示例代码。另一种方法是使用提到的 websockets

于 2013-03-14T14:42:50.023 回答