【问题标题】:Aborting a jQuery getJSON XMLHttpRequest中止 jQuery getJSON XMLHttpRequest
【发布时间】:2010-11-20 06:04:20
【问题描述】:

原来这是一个 Firebug 错误的产物。 Ajax 请求被取消,但 Firebug 继续报告它是活动的。详情here.


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

我以正常方式设置请求:

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

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

ajax.abort();

但是,当我查看 Firebug 时,我发现它仍在运行...

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

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

【问题讨论】:

    标签: javascript jquery getjson


    【解决方案1】:

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

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

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

    【讨论】:

    • 啊!问题是我最终收到了太多的 http 请求并且浏览器挂起,所以我确实需要终止它...
    • 引用来自 Microsoft javascript 文档。由此看来,我想这在很大程度上取决于浏览器的实现到底发生了什么。大多数浏览器可能会尝试优雅地完成 - 因此连接可能仍会持续一段时间,直到最终关闭 - 但这只是一个猜测。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你可以看看JSONP-Plugin 使用此插件,您可以手动中止请求。 还可以查看 IBM 技术库中的 "a cautionary note"

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

      【讨论】:

        【解决方案4】:

        有关处理此问题的另一篇精彩文章可在此处找到:http://www.bennadel.com/blog/1500-Catching-Timeout-Errors-With-jQuery-Powered-AJAX.htm

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

        谢谢!

        【讨论】:

          猜你喜欢
          • 2011-12-17
          • 2023-03-10
          • 2013-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-20
          • 2011-05-07
          相关资源
          最近更新 更多