jQuery - 每 10 秒调用一次 ajax

Posted

技术标签:

【中文标题】jQuery - 每 10 秒调用一次 ajax【英文标题】:jQuery - Call ajax every 10 seconds 【发布时间】: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>
    ";
 

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

我做错了什么?谢谢:)

【问题讨论】:

【参考方案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

【讨论】:

以上是关于jQuery - 每 10 秒调用一次 ajax的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery 中每 5 秒调用一次函数的最简单方法是啥? [复制]

即使App被IOS中的用户杀死,如何每10秒调用一次api?

如何使用 QT 每 15 秒调用一次函数

每 10 秒获取一次 PARTIAL_WAKELOCK

重复 jQuery ajax 调用

Xamarin Forms:即使应用程序在后台,如何每 x 秒运行一次服务?