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