Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Ajax从数据库动态获取数据,无需刷新间隔_Php_Javascript_Jquery_Ajax - Fatal编程技术网

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

Php 使用Ajax从数据库动态获取数据,无需刷新间隔,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,我一直在处理jquery/ajax请求。我已经成功地获得了一个ajax请求,它将从数据库中检索数据,问题是,我一直在为window.setInterval()提供服务,以每x秒刷新一次此函数 我将如何更改它以保持ajax请求的活动性,这样它就可以更新html内容,而不必向ajax脚本提供多个请求 我的代码如下: window.setInterval(function() { $(function () { $.ajax({

我一直在处理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);

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

编辑:由于您的服务器技术主要使用php,请看Ratchet。我听说过这方面的好消息

这是一篇关于将WebSocket与HTML结合使用的优秀文章

NET在Signal中有一个很棒的套接字库

有大量关于套接字的php文档

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

您需要一种服务器端的服务,在请求返回之前保持请求的活动状态。这通常被称为“彗星”、“长轮询”或“推送”

原则是:

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


    编辑:

    使用PHP的一些示例:


    您可以设置
    xhr.multipart=true
    并修改服务器代码。看见另一种方法是使用前面提到的WebSocket

    setInterval是正确的方法。如果你想要一个异步服务器,你应该试试。SignalR的一个好处是,对于那些缺乏web套接字本机支持的旧浏览器,它可以采用长轮询和类似的技术。@ChristofReliasson是的,还有其他一些东西。SignalR库是如此具有革命性,以至于Scott Hansleman及其公司现在将其作为.NET标准web库的一部分。它非常强大,我应该指定我主要使用PHP@user2146021别担心。我已经用我经常听到的推荐的优秀PHP websocket库更新了我的答案,并重新标记了您的问题以使其更清晰。websocket的主要问题是,一些浏览器仍然不支持它们。我编辑了我的答案,添加了PHP Comet实现的示例。希望这有帮助:)