是否有任何浏览器支持在正在进行的XmlHttpRequest上设置超时?

时间:2014-01-13 11:25:49

标签: javascript ajax xmlhttprequest timeout abort

我希望能够中止异步XMLHttpRequests,它花费很长时间等待来自服务器的结果。因为这些请求可能很长,所以在发送XHR之前设置超时是不合适的。

我可以调用XMLHttpRequest.abort()但是虽然这确实会阻止调用就绪状态更改处理程序,但它似乎不会关闭与服务器的连接,因此服务器继续工作(在Firefox和Chrome中都可以看到) 。在最终从服务器收到数据之前,服务器连接似乎没有关闭。

spec表示XHR上的超时属性可以随时设置,即使在提取开始后也是如此:“这意味着可以在提取过程中设置超时属性。如果发生这种情况,它将会仍然是相对于开始取物来衡量的。“但是,在等待来自服务器的数据的XHR调用abort()之前或之后立即设置此属性似乎在Firefox 26或Chrome 31中无效。连接保持打开状态,直到服务器完成其工作并发送响应头。

任何浏览器都支持此功能吗?还是我误解了什么?我正在测试在客户端使用Javascript和在服务器端使用Java servlet,因此没有其他框架妨碍。

1 个答案:

答案 0 :(得分:1)

您可以找到支持here。另请注意,在IE中,您需要在timeout方法调用后添加open值。例如:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {/*code*/};
xhr.open(/*arguments*/);
xhr.timeout = 4000;
xhr.ontimeout = function () { /*Timeout handler*/ }
xhr.send(null);