有哪些浏览器支持在进行中的XmlHttpRequest上设置超时?

3
我想要能够中止异步XMLHttpRequest,因为这些请求可能需要很长时间才能从服务器获取结果。由于这些请求可能非常长,因此在发送XHR之前设置超时时间是不合适的。
我可以调用XMLHttpRequest.abort(),但是虽然这会防止ready state change处理程序被调用,但它似乎并没有关闭与服务器的连接,因此服务器继续工作(在Firefox和Chrome中观察到)。似乎直到最终从服务器接收到数据,服务器连接才会关闭。 spec 表示XHR上的超时属性可以在任何时候设置,甚至在获取已经开始后:"这意味着超时属性可以在获取正在进行时设置。如果发生这种情况,它仍将相对于获取的开始进行测量。" 但是,在等待从服务器获取数据的XHR调用abort()之前或之后立即设置此属性似乎在Firefox 26或Chrome 31中没有任何效果。连接保持打开状态,直到服务器完成其工作并发送响应头。
这个特性在任何浏览器中都受支持吗?还是我误解了什么?我正在客户端使用Javascript和服务器端的Java servlet进行测试,因此没有其他框架干扰。

我认为 abort 确实会关闭连接。你的问题可能是服务器没有检测到连接已关闭。例如,“PHP 在尝试向客户端发送信息之前,不会检测到用户已中止连接”(来自 http://php.net/manual/en/function.ignore-user-abort.php)。 - Marco Castelluccio
1个回答

1
你可以在这里找到支持。同时请注意,在IE中,你需要在open方法调用后添加timeout值。例如:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {/*code*/};
xhr.open(/*arguments*/);
xhr.timeout = 4000;
xhr.ontimeout = function () { /*Timeout handler*/ }
xhr.send(null);

我所询问的是在调用xhr.send()之后设置xhr.timeout以强制关闭不需要的连接的支持情况。感谢提供链接,但它只记录了哪些浏览器完全支持xhr.timout,而我的实验表明FF和Chrome仅在xhr.send()之前部分支持它,而在之后则不支持。 - spiffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接