我希望在后台使用jQuery作为“心跳”进行AJAX调用,以便我的Web应用程序可以检查新数据。例如,每10秒钟。
我在其他帖子上看到,可以使用setInterval()
来调用每隔X毫秒执行调用的方法。
但是,如果我的AJAX调用时间超过10秒,会发生什么?我仍然希望它完成最后一个请求,并且我不希望在已经有一个正在进行的情况下发起另一个呼叫。这可能会导致相同的信息被放置到页面两次!
当我的方法等待原始AJAX调用完成时,实现此方法的方法是什么,而不是简单地“每10秒”,原始的可能尚未完成。
答案 0 :(得分:8)
尝试从ajax成功函数设置另一个超时:
function poll() {
setTimeout( function() {
$.ajax(.......).success( function(data) {
poll(); //call your function again after successfully calling the first time.
});
}, 10000);
}
答案 1 :(得分:6)
不是使用setInterval
,而是在AJAX完成回调中调用setTimeout()
,以便在前一个完成之后10秒开始每次调用。
答案 2 :(得分:0)
而不是使用setInterval,计算请求时间(通常使用unix时间戳,以秒为单位),10秒内多少,在服务器端,使用setTimeout
剩余时间,因此它会因用户而异用户,他们的ping时间(或网站的业务)
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