我已经设置了一个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。这样,刷新只有自上次刷新以来的指定期间才会发生。

与其使用固定的硬编码间隔:触发下一个刷新作为处理当前刷新的最后一步,例如“成功”(或“完整”)事件回调。

您可以添加一个变量,该变量可以跟踪当前请求的发送时间,以便您计算一个动态延迟:

  1. 乘坐当前时间T1
  2. 发送异步请求
  3. 其他事情发生...
  4. 异步请求返回,回调执行
  5. 从当前时间减去T1
  6. 如果结果<您所需的请求间隔,请设置延迟值> 0
  7. 如果结果> =您所需的请求间隔,请设置延迟值= 0
  8. 用延迟值调用SetteMout,启动下一个周期

我能告诉你的是,使用代码中的标志。喜欢(不是我实际上只推荐一个简单的例子)

var isWorking = false;
function doRequest(){
  if(isWorking) return;
  isWorking = true;
  $.ajax({
    ...,
    success: workWithResponse
  });
}

function workWithResponse(){
  /* doAnythingelse */
  isWorking = false;
}

setInterval(doRequest,1000);

这样的东西,它的原始性,但您会避免比赛条件。问候。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top