【问题标题】:jQuery - Call ajax every 10 secondsjQuery - 每 10 秒调用一次 ajax
【发布时间】:2011-08-06 22:52:48
【问题描述】:

我有一个这样构建的mysql反馈数据库:

名称 |位置 |反馈

瑞恩 |英格兰 |大力支持

显然有比这更多的条目。我正在尝试构建一个反馈 div,它通过 ajax 每 10 秒显示一个新的反馈项。

所以我构建了这个:

$(document).ready(function(){
   new get_fb(); 
 });

function get_fb(){
var feedback = $.ajax({//Ajax
                        type: "POST",
                        url: "feedback.php",
                        async: false
                        }).responseText;//end of ajax

$('div.feedback-box').html(feedback).delay(10000).queue(function() {
    new get_fb(); 
    });
}

这是我的 PHP 文件:

$result = mysql_query("SELECT * FROM feedback ORDER BY RAND() LIMIT 0,1");
while($row = mysql_fetch_array($result))
{
    $name = $row['name'];
    $location = $row['location'];
    $feedback = $row['feedback'];

    echo "
    <p>Name: $name, Location: $location, Feedback: $feedback.</p>
    ";
} 

但是,这只显示了两个。它不会一直显示新的,它只是显示第一个然后是第二个然后停止。

我做错了什么?谢谢:)

【问题讨论】:

    标签: php jquery ajax


    【解决方案1】:

    您可以尝试 setInterval() 代替:

    var i = setInterval(function(){
       //Call ajax here
    },10000)
    

    【讨论】:

      【解决方案2】:

      你想要setInterval()吗?

      setInterval(function(){get_fb();}, 10000);
      

      或者:

      setInterval(get_fb, 10000);
      

      或者,如果您希望它仅在成功完成调用后运行,您可以在您的 .ajax().success() 回调中进行设置:

      function get_fb(){
          var feedback = $.ajax({
              type: "POST",
              url: "feedback.php",
              async: false
          }).success(function(){
              setTimeout(function(){get_fb();}, 10000);
          }).responseText;
      
          $('div.feedback-box').html(feedback);
      }
      

      如果您希望它运行而不管结果如何,请使用.ajax().complete()

      function get_fb(){
          var feedback = $.ajax({
              type: "POST",
              url: "feedback.php",
              async: false
          }).complete(function(){
              setTimeout(function(){get_fb();}, 10000);
          }).responseText;
      
          $('div.feedback-box').html(feedback);
      }
      

      这是两者的演示。请注意,成功只工作一次,因为 jsfiddle 在 ajax 调用中返回 404 错误。

      http://jsfiddle.net/YXMPn/

      【讨论】:

      • 我注意到我已经删除了代码的.responseText 部分,这会破坏功能。查看我的上一次编辑。
      • 刚刚回到我的这个项目。这个适合使用吗?我的意思是它会对服务器造成压力吗?该网站只是一家电气公司,规模并不大。 ://
      • 如果每十秒一次,只有在最后一个用户完成后,并且您的用户群相对较小(
      • 考虑到如果你把它放在你的成功回调中,它每次都会复制。如果它是一个函数,那不是正确的方法。
      • 一旦我使用 setInterval 进行 ajax 间隔 5 秒,让页面连续打开 6 小时,整个浏览器都挂起,CPU 使用率一直是 23+%(几乎一个核心在 100% 之后它在双核超线程 CPU 上)。看起来 setInterval 会导致某种 cpu/内存泄漏,并且如果您的客户长时间观看您的网页,他们会非常不可靠。
      【解决方案3】:
      setInterval(function()
      { 
          $.ajax({
            type:"post",
            url:"myurl.html",
            datatype:"html",
            success:function(data)
            {
                //do something with response data
            }
          });
      }, 10000);//time in milliseconds 
      

      【讨论】:

      • @Muhammed - 您在 url 属性上有一个未对齐的双引号。
      • @Jared 感谢提及和@Maerlyn 感谢更正
      • 当前页面有很多jquery函数和数据的时候加这段代码好不好
      • 最好使用setTimeout。无论之前的调用是否仍在运行,SetInterval 都会访问服务器。
      【解决方案4】:

      这对我有用

      setInterval(ajax_query, 10000);
      
      function ajax_query(){
         //Call ajax here
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-06
        • 2018-02-16
        • 1970-01-01
        • 2023-03-16
        • 2014-10-16
        相关资源
        最近更新 更多