【发布时间】:2012-03-19 03:11:39
【问题描述】:
我一直在网上搜索,试图找到一个直接的答案。有谁知道浏览器 ajax 请求的默认超时长度?如果它改变了,也按版本?
【问题讨论】:
标签: ajax xmlhttprequest
我一直在网上搜索,试图找到一个直接的答案。有谁知道浏览器 ajax 请求的默认超时长度?如果它改变了,也按版本?
【问题讨论】:
标签: ajax xmlhttprequest
我不认为浏览器对 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
【讨论】:
根据规范,超时值默认为零,这意味着没有超时。但是,您可以在 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
【讨论】:
If you set an XMLHttpRequest time-out value that is larger than the network stack's time-out value, the network stack will time out first and the ontimeout event will not be raised.
浏览器确实有一个超时值,行为取决于浏览器 chrome 的超时值为 5 分钟,5 分钟后它会重新发送 ajax 调用
【讨论】:
我做了少量的测试。为了测试我加载了我的网站,停止了本地服务器,然后尝试了 AJAX 请求。我将 timeout 设置为 1000 毫秒之类的低值,直到我可以确保我的代码最少(您必须将 xhr.timeout 放在 open 之后和 之前 send )。
一旦我开始工作,我最初的目标是确定允许的适当时间量,但是我很惊讶timeout 会被浏览器完全忽略的速度有多快。我的目标是在错误处理不再可行之前尝试确定最大超时可能。这意味着在这些相当短的时间跨度之后,您的超时处理程序脚本将根本无法工作。我发现的很可悲。
所以...
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 处理程序。
【讨论】: