使用setInterval的Ajax Heartbeat,同时防止多个调用

我希望在后台使用jQuery作为“心跳”进行AJAX调用,以便我的Web应用程序可以检查新数据。 例如每10秒。

我在其他post上看到,可以使用setInterval()来调用每隔X毫秒执行调用的方法。

但是,如果我的AJAX调用超过10秒钟会发生什么? 我仍然希望它完成最后一个请求,并且我不希望在已经有一个正在进行的情况下发起另一个呼叫。 这可能导致相同的信息被放置到页面两次!

实现此方法的方法是什么,等待原始AJAX调用完成,而不是简单地“每10秒”,原始的AJAX调用可能尚未完成。

尝试从ajax成功函数设置另一个超时:

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

而不是使用setInterval ,在AJAX完成回调中调用setTimeout()以在前一个调用完成后10秒启动每个调用。

而不是使用setInterval,计算请求时间(通常使用unix时间戳,以秒为单位),10秒内服务器端多少使用setTimeout剩余时间,因此它会因用户的ping时间而异(或网站的业务)

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

在服务器端,(就像在PHP中),你会这样做