浏览器在ajax请求后等待多长时间?

Tar*_*vyi 67 ajax request connection-timeout

在服务器回答请求之前,浏览器在显示错误之前等待多长时间?这次可以无限制吗?

Tj *_*lie 74

如果您正在使用jQuery $ .ajax调用,则可以设置timeout属性以控制请求返回超时状态之前的时间.超时设置为毫秒,因此只需将其设置为非常高的值.您也可以将其设置为0表示"无限制",但在我看来,您应该设置一个较高的值.

注意:无限制实际上是默认值,但大多数浏览器都有默认的超时时间.

当由于超时而返回ajax调用时,它将返回错误状态"timeout",如果需要,您可以使用单独的case处理.

因此,如果你想设置3秒的超时,并在这里处理超时是一个例子:

$.ajax({
    url: "/your_ajax_method/",
    type: "GET",
    dataType: "json",
    timeout: 3000, //Set your timeout value in milliseconds or 0 for unlimited
    success: function(response) { alert(response); },
    error: function(jqXHR, textStatus, errorThrown) {
        if(textStatus==="timeout") {  
            alert("Call has timed out"); //Handle the timeout
        } else {
            alert("Another error was returned"); //Handle other error type
        }
    }
});?
Run Code Online (Sandbox Code Playgroud)

  • 将`timeout`值设置为'0`会将AJAX超时设置为无限期(读取无限制). (6认同)

sma*_*sey 14

是的,不是.是的服务器可以这样做或被配置为这样做,没有浏览器(我不知道版本/分销商的细节)可能启用超时.

有两种解决方案可以通过HTTP实现/模拟:

  • 如果这很简单,一个长时间运行的脚本并且你正在等待结果这不是要走的路,你应该像之前提到的海报那样做,并使用异步处理与服务器轮询结果,这将是一个更加确定的解决方案.例如:来自图像处理器服务器端的缩略图脚本:用户上传图像,服务器立即返回200和"作业ID".然后,客户端(javascript ^^)可以使用JobID来请求作业状态/结果.
  • 如果您的目标是在浏览器和服务器之间建立类似的实时连接(单向连接,一旦浏览器发出请求,就不会在不使用新请求的情况下发送更多信息(ajax ^^)),这称为长轮询/ reverse ajax,可用于通过http进行实时通信.有几种技术并行使用2个长轮询请求,因此一旦其中一个超时,第二个变为活动,第一个尝试重新连接.