“无法为从窗口上下文发出的同步 http(s) 请求设置 XMLHttpRequest.timeout”是啥意思?

Posted

技术标签:

【中文标题】“无法为从窗口上下文发出的同步 http(s) 请求设置 XMLHttpRequest.timeout”是啥意思?【英文标题】:What does "XMLHttpRequest.timeout cannot be set for synchronous http(s) requests made from the window context" mean?“无法为从窗口上下文发出的同步 http(s) 请求设置 XMLHttpRequest.timeout”是什么意思? 【发布时间】:2014-02-24 14:37:37 【问题描述】:

我在 Mac 上的 Safari 中的同步 xm​​l http 请求出现一些超时。作为一种解决方法,我尝试像这样添加超时:

    req.open(this.method, fullURL, this.isAsync);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    var params = this.envelopeForm();
    req.setRequestHeader("Content-length", params.length);
    req.timeout = 60000;  //Get the timeut cannot be set here
    req.send(params);  //Without the above, get a timeout here in Safari

使用 .timeout = 60000 我在 .send 上遇到了超时。

使用 .timeout=60000,我得到“无法为从窗口上下文发出的同步 http(s) 请求设置 XMLHttpRequest.timeout。”

我不清楚“无法为从窗口上下文发出的同步 http(s) 请求设置 XMLHttpRequest.timeout”是什么意思。我还在 Mozilla 的文档中找到了它,措辞如下:

注意:对于拥有窗口的同步请求,您不能使用超时。

有解决办法吗?在 MSDN 网站上,我发现以下关于 Internet Explorer 的声明:

如果设置的 XMLHttpRequest 超时值大于网络栈的超时值,网络栈会先超时,不会引发 ontimeout 事件

-埃里克

【问题讨论】:

这意味着您在使用同步时必须等待。这只是使用异步的原因之一。 但是 Safari 很不耐烦,它会超时,这就是我尝试设置 .timeout 属性的原因。 几乎没有什么情况不能使用异步 ajax 而可以使用同步 ajax。这是最终的解决方案。发布您的代码,我们可以向您展示如何修改它。 有没有办法消除拥有窗口或窗口上下文? 【参考方案1】:

timeout 带有同步 ajax 请求只能从 web worker 中使用

【讨论】:

以上是关于“无法为从窗口上下文发出的同步 http(s) 请求设置 XMLHttpRequest.timeout”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章