浏览器的AJAX(XmlHttpRequest)超时长度

时间:2012-02-29 16:00:26

标签: ajax xmlhttprequest

我一直在网上搜索,试图找到一个直接的答案。有没有人知道浏览器的ajax请求的默认超时长度?如果它改变了版本?

4 个答案:

答案 0 :(得分:21)

根据规范,超时值默认为零,这意味着没有超时。但是,您可以在XHR.timeout属性上设置超时值;该值以毫秒为单位。

来源:

http://www.w3.org/TR/2011/WD-XMLHttpRequest2-20110816/#the-timeout-attribute http://msdn.microsoft.com/en-us/library/cc304105(v=vs.85).aspx

答案 1 :(得分:4)

我认为浏览器没有AJAX超时,只有同步或异步请求;同步 - 首先冻结JavaScript执行,直到请求返回, 异步 - 不冻结JavaScript执行,它只是将请求从执行流中取出,如果你有一个回调函数,它将与正在运行的脚本并行执行该函数(类似于一个线程)

**sync flow:**

running JS script
     |
    ajax
(wait for response)
     |
execute callback 
     |
running JS script




 **async flow:**

 running JS script
     |
    ajax  --------------------
     |                       |
 running JS script       execute callback

答案 2 :(得分:2)

我做了适量的测试。为了测试我加载了我的网站,停止了本地服务器,然后尝试了一个AJAX请求。我将timeout设置为低至1000毫秒,直到我确保我的代码最少(必须xhr.timeout放在open之后< / em> send)。

一旦我开始工作,我的最初目标是确定允许的适当时间,但是我很惊讶浏览器会彻底忽略timeout。我的目标是在尝试确定错误处理不再可行之前可能的最大超时时间进行了改进。这意味着经过这些相当短暂的时间,您的超时处理程序脚本将无法正常工作。我发现的非常可怜。

  • Chrome 60:995ms,996ms会将肮脏的恶意错误输入控制台。
  • Firefox 52 ESR:~3000ms,鼠标位置或其他问题可能导致周围或不到三秒钟内无响应。

因此...

xhr.open(method,url,true);
xhr.timeout = 995;//REALLY short
xhr.send(null);
xhr.ontimeout = function ()
{
 //Code will only execute if at or below *effective* timeouts list above.
 //Good spot to make a second attempt.
}

因此,如果您的timeout设置高于995毫秒 Chrome 将忽略您的代码,并在您努力保持干净的干净空白控制台上呕吐。 Firefox 并不是更好,并且有一些不可靠的请求只是暂停,超出了我的耐心,并且这样做会忽略ontimeout处理程序。

答案 3 :(得分:1)

浏览器确实有超时值,行为取决于浏览器chrome的超时值为5分钟,5分钟后它重新发送ajax调用