jQuery:Ajax功能的延迟间隔直到上一次运行完成
-
21-08-2019 - |
题
我已经设置了一个Ajax页面刷新 setInterval。服务器时不时要慢,以至于在上一台完成之前启动了新请求。
我该如何预防?
解决方案
使用比刷新间隔短的超时值。当请求时间输出时,它将调用错误处理程序,因此您需要区分处理程序中的超时错误和其他类型的错误。
$.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。这样,刷新只有自上次刷新以来的指定期间才会发生。
与其使用固定的硬编码间隔:触发下一个刷新作为处理当前刷新的最后一步,例如“成功”(或“完整”)事件回调。
您可以添加一个变量,该变量可以跟踪当前请求的发送时间,以便您计算一个动态延迟:
- 乘坐当前时间T1
- 发送异步请求
- 其他事情发生...
- 异步请求返回,回调执行
- 从当前时间减去T1
- 如果结果<您所需的请求间隔,请设置延迟值> 0
- 如果结果> =您所需的请求间隔,请设置延迟值= 0
- 用延迟值调用SetteMout,启动下一个周期
我能告诉你的是,使用代码中的标志。喜欢(不是我实际上只推荐一个简单的例子)
var isWorking = false;
function doRequest(){
if(isWorking) return;
isWorking = true;
$.ajax({
...,
success: workWithResponse
});
}
function workWithResponse(){
/* doAnythingelse */
isWorking = false;
}
setInterval(doRequest,1000);
这样的东西,它的原始性,但您会避免比赛条件。问候。
不隶属于 StackOverflow