12

原来这是一个 Firebug 错误的人工制品。Ajax 请求被取消,但 Firebug 继续报告它是活动的。详情在这里


我长期运行 XMLHttpRequests,我需要能够在某些情况下中止它们。

我以正常方式设置请求:

ajax = $.getJSON(url + "?updates", function(data) { ...; });

后来我想中止这个请求,看起来很简单:

ajax.abort();

然而,当我查看 Firebug 时,我发现它仍在运行......

在我尝试中止它之前,我 console.log out ajax 的值,它确认它的值是 XMLHttpRequest(readyState 为 0)。

对 XMLHttpRequest 触发 abort() 的方式和时间是否有限制?

4

4 回答 4

2

关于处理这个问题的另一篇很棒的文章可以在这里找到:http ://www.bennadel.com/blog/1500-Catching-Timeout-Errors-With-jQuery-Powered-AJAX.htm 。

我只是将我的 .getJSON 请求转换为 .ajax 并添加了超时/错误处理。

谢谢!

于 2010-02-23T16:21:39.480 回答
2

调用 abort 会重置对象;onreadystatechange 事件处理程序被移除,readyState 更改为 0(未初始化)。

我不认为它会取消请求本身,它只是忽略任何响应(操纵事件处理程序)-但我还没有真正尝试过。

但它绝对允许您重用该对象 - 无论浏览器是否仍有一些线程处理旧请求。

于 2009-08-17T13:37:02.533 回答
2

您可以查看JSONP-Plugin 使用此插件,您可以手动中止请求。另请查看IBM 技术库中的“警告说明” :

首先,JSONP 调用没有错误处理。如果动态脚本插入有效,您会被调用;如果没有,什么都不会发生。它只是默默地失败。例如,您无法从服务器捕获 404 错误。您也不能取消或重新启动请求。

于 2009-08-17T14:13:05.220 回答
0

看看 jquery AJAX Queue/Cache/Abort/Block Manager,也许这可以帮助您防止当前的情况。

于 2009-08-17T14:12:17.637 回答