【问题标题】:How to detect php server timeout on ajax request?如何检测 ajax 请求的 php 服务器超时?
【发布时间】:2013-01-01 13:05:36
【问题描述】:

我想知道,假设您对运行 PHP 代码的页面进行了 ajax 请求。页面输出一些数据(使用 flush() 方法或其他方法),但由于 30 秒超时或其他错误,php 请求结束。

现在,当请求结束时,我想在客户端了解它并重新启动请求。

即假设我有这样的东西

xmlhttp.onreadystatechange=function(){
    if(xmlhttp.readyState==3 && xmlhttp.status==200){
    document.getElementById("A").innerHTML=xmlhttp.responseText;
    }
    else if(xmlhttp.readyState==4 && xmlhttp.status==200){
    document.getElementById("A").innerHTML=xmlhttp.responseText;
    //plus some additional code to end the process
    }
    else if(xmlhttp.status== SOMETHING /*WHAT DO I ADD HERE TO KNOW THAT THE SERVER HAS TIMED OUT OR SOMETHING SO I CAN RESTART THE XMLHTTP CYCLE */){
    //code to resend xmlhttp request.
    }
    
}

【问题讨论】:

  • 在您的问题中,您要求检查在服务器端,但在您的代码中,您在 javascript 中有空间。由于您的 ajax 是异步的,它可以被触发,然后用户可以离开页面。该脚本将没有机会再次执行或通知服务器发生超时。您实际上必须强制用户留在您的页面上,直到响应返回。您可能必须通过在服务器上而不是 js 上跟踪来解决此问题。
  • 我的错,这是一个错字。更正。另外,我希望支票在客户端。如果用户离开页面,dosnet 真的很重要。

标签: php javascript ajax


【解决方案1】:

我使用的一个策略是在JS中设置一个计时器,如果调用成功则清除它。

var myTimer = setTimeout(stuffToDoOnFailure, 6000); // 6 secs

ajaxCall(function callBack() {
    clearTimeout(myTimer);
});

编辑:

当然,如果 ajax 调用在 6 秒后成功,您可能会同时执行 stuffToDoOnFailurecallBack,因此您想以某种方式处理这种情况。不过,这取决于您的应用。

【讨论】:

  • 它还预先假设您知道时间限制是多少。不是一个好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-11-05
  • 2011-01-26
  • 1970-01-01
  • 2015-09-01
  • 2012-07-08
  • 2021-11-25
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多