阿贾克斯心跳使用的setInterval,防止在同一时间多个呼叫(Ajax Heartbeat us

2019-07-04 16:04发布

我愿使用jQuery在后台“心跳” AJAX调用,这样我的web应用程序可以检查是否有新的数据。 例如每10秒钟。

我看到的其他职位,这是可以使用setInterval()调用它确实毫秒每X号码的呼叫的方法。

但是,如果我的AJAX调用需要超过10秒,会发生什么? 我还是希望它完成的最后一个请求,我不希望被鼓动另一呼叫时,已经是一个正在进行中。 这可能会导致同样的信息被放置在页面的两倍!

什么是完成,以实现该为我的方法等待原来的AJAX调用的方式,而不是简单的“每10秒”,在原先的可能还不是完整的。

Answer 1:

试着从你的Ajax成功功能设置另一个超时:

function poll() {
    setTimeout( function() {
        $.ajax(.......).success( function(data) {
            poll();  //call your function again after successfully calling the first time.
        });
    }, 10000);
}


Answer 2:

而不是使用setInterval ,打电话setTimeout()在AJAX完成回调前一后完成 ,开始每次通话10秒。



Answer 3:

代替使用的setInterval,计算出请求时间(通常使用Unix时间戳以秒计),多少10秒,在服务器侧,使用setTimeout的剩余时间,所以它会从用户而异,它们的平时间(该网站或企业)

function heartbeat(){
  $.ajax({
    'url': '/where/',
    'success': function(data){
       setTimeout(heartbeat, parseInt(data) * 1000);
    }
  });
}
heartbeat(); // initialize it

在服务器端,(如在PHP),你会怎么做

<?php
// do your stuff
echo (time() - (int)$time_requested) + 10; // it will vary per user, so if it takes 2 second, it will be 12, if it returns imediately, returns 10 


文章来源: Ajax Heartbeat using setInterval, Preventing multiple calls at the same time