中止jQuery getJSON XMLHttpRequest

原来这是一个Firebug bug的人工制品。 Ajax请求被取消,但Firebug继续将其报告为活动状态。 细节在这里 。


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

我以正常方式设置请求:

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

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

 ajax.abort(); 

当我看着Firebug时,我发现它还在运行……

我在尝试中止它之前就调试了ajax的值,它确认它的值是和XMLHttpRequest(readyState为0)。

abort()是如何以及何时触发XMLHttpRequest的?

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

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

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

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

首先,JSONP调用没有error handling。 如果动态脚本插入有效,则会调用; 如果没有,没有任何反应。 它只是默默地失败了。 例如,您无法从服务器捕获404错误。 你也不能取消或重启请求。

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

我只是将.getJSON请求转换为.ajax并添加了超时/error handling。

谢谢!

看一下jquery AJAX队列/缓存/中止/块管理器 ,也许这可以帮助您防止当前的情况。