我已经使用setInterval设置了 AJAX 页面刷新。有时,服务器速度很慢,以至于在前一个请求完成之前就发起了一个新请求。
我怎样才能防止这种情况?
我已经使用setInterval设置了 AJAX 页面刷新。有时,服务器速度很慢,以至于在前一个请求完成之前就发起了一个新请求。
我怎样才能防止这种情况?
使用比刷新间隔更短的超时值。当请求超时时,它将调用错误处理程序,因此您需要区分处理程序中的超时错误和其他类型的错误。
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
timeout: 5000, /* ms or 5s */
success: function(msg){
alert( "Data Saved: " + msg );
}
});
jquery.com 上的文档。上述示例来自同一来源,但添加了超时值。
改用 setTimeout,只有在收到 AJAX 请求的结果后才启动另一个 setTimeout。这样,刷新仅在自上次刷新后的指定时间段后发生。
代替使用固定的硬编码间隔:触发下一次刷新作为处理当前刷新的最后一步,例如在“成功”(或“完成”)事件回调中。
您可以添加一个变量来跟踪当前请求的发送时间,以便计算动态延迟:
我可以告诉你的是,在你的代码中使用一个标志。喜欢(不是我实际推荐的只是一个简单的例子)
var isWorking = false;
function doRequest(){
if(isWorking) return;
isWorking = true;
$.ajax({
...,
success: workWithResponse
});
}
function workWithResponse(){
/* doAnythingelse */
isWorking = false;
}
setInterval(doRequest,1000);
类似的东西,它很原始,但你会避免竞争条件。问候。