使用Ajax从数据库动态获取数据,无需刷新间隔

时间:2013-03-14 14:33:12

标签: php javascript jquery ajax

我一直在使用jquery / ajax请求。我已经成功获得了一个从数据库中检索数据的ajax请求,问题是,我每隔x秒就会不断地为window.setInterval()提供刷新功能。

如何更改此设置以使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 个答案:

答案 0 :(得分:2)

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

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

这是一篇关于使用带有HTML的websockets的优秀文章 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

答案 1 :(得分:0)

了解如何使用网络套接字 - 您可以随时向客户发送消息以查找新数据 - 这样您就不会发出任何不必要的请求。尝试检查pubnub -service是便宜的,可以处理你需要的一切。

答案 2 :(得分:0)

你需要一些服务器端来保持请求存活,直到有东西返回。这通常被称为“Comet”,“Long-polling”或“Push”。

原则是:

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


    编辑:

    使用PHP的一些例子:

    Comet and PHP

    Simple Comet Implementation Using PHP and jQuery

答案 3 :(得分:0)

您可以设置xhr.multipart = true并修改服务器代码。见Multipart Responses Example Code。另一种方法是使用上面提到的websockets