Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
浏览器的AJAX(XmlHttpRequest)超时长度_Ajax_Xmlhttprequest - Fatal编程技术网

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

浏览器的AJAX(XmlHttpRequest)超时长度,ajax,xmlhttprequest,Ajax,Xmlhttprequest,我一直在网上搜寻,试图找到一个直截了当的答案。有人知道浏览器ajax请求的默认超时长度吗?如果更改了,是否也按版本 我认为浏览器没有AJAX超时,只有同步或异步请求;同步-首先冻结JavaScript执行,直到请求返回, 异步-不冻结JavaScript执行,它只是将请求从执行流中取出,如果您有回调函数,它将与正在运行的脚本并行执行该函数(类似于线程) 根据规范,超时值默认为零,这意味着没有超时。但是,您可以在XHR.timeout属性上设置超时值;该值以毫秒为单位 资料来源: 浏览器确实有一

我一直在网上搜寻,试图找到一个直截了当的答案。有人知道浏览器ajax请求的默认超时长度吗?如果更改了,是否也按版本

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


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

资料来源:


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

我做了少量测试。为了测试,我加载了我的网站,停止了本地服务器,然后尝试了一个AJAX请求。我将
timeout
设置为1000ms之类的较低值,直到我可以确保我有最少的代码为止(您必须将
xhr.timeout
放在
open
之后和
send
之前)

一旦它开始工作,我最初的目标是确定允许的适当时间量,但是我很惊讶
超时的速度会被浏览器完全忽略。我的目标是在错误处理不再可行之前,尝试确定最大超时可能是多少。这意味着超过这些相当短的时间跨度,超时处理程序脚本将根本无法工作。我的发现很可怜

  • Chrome 60:995ms、996ms将向控制台抛出一个肮脏的邪恶错误
  • Firefox 52 ESR:~3000ms,鼠标位置或其他问题可能会在三秒左右或不到三秒的时间内导致无响应
所以


因此,如果您的
超时设置高于995ms,Chrome将忽略您的代码,并在您努力保持干净的干净空控制台上呕吐Firefox并没有好多少,而且有一些不可靠的请求超时时间远远超过了我的耐心,这样做时忽略了
ontimeout
处理程序。

但是有一个潜在的超时时间不在规范中。从第二个链接:
如果您设置了更大的XMLHttpRequest超时值如果网络堆栈的超时值大于网络堆栈的超时值,则网络堆栈将首先超时,并且不会引发ontimeout事件。
10秒后我的超时..?Chrome似乎有超时。即使我将ajax调用超时设置为900000(15分钟),在长时间运行的请求上,请求在状态为“已取消”的情况下恰好1分钟后超时。M87对此线程的回答也证实了这一点:
**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.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.
}