我愿使用jQuery在后台“心跳” AJAX调用,这样我的web应用程序可以检查是否有新的数据。 例如每10秒钟。
我看到的其他职位,这是可以使用setInterval()
调用它确实毫秒每X号码的呼叫的方法。
但是,如果我的AJAX调用需要超过10秒,会发生什么? 我还是希望它完成的最后一个请求,我不希望被鼓动另一呼叫时,已经是一个正在进行中。 这可能会导致同样的信息被放置在页面的两倍!
什么是完成,以实现该为我的方法等待原来的AJAX调用的方式,而不是简单的“每10秒”,在原先的可能还不是完整的。
试着从你的Ajax成功功能设置另一个超时:
function poll() {
setTimeout( function() {
$.ajax(.......).success( function(data) {
poll(); //call your function again after successfully calling the first time.
});
}, 10000);
}
而不是使用setInterval
,打电话setTimeout()
在AJAX完成回调前一后完成 ,开始每次通话10秒。
代替使用的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