在 jQuery 中停止 XHR 请求

Posted

技术标签:

【中文标题】在 jQuery 中停止 XHR 请求【英文标题】:Stop XHR request in jQuery 【发布时间】:2012-12-31 03:09:26 【问题描述】:

刷新页面时是否可以停止以下代码的请求/响应超时?

    setInterval(function()
    var xhr = $.ajax(
    url:'/ajax_controller/searchForTracks/'+logged_user_id,
    success: function(data)
        console.log(data+' tracks added');
            
        );
    ,5000);

我试过了:

    $(window).unload(function()
            xhr.abort();
        );

   window.onbeforeunload = function()
      throw new error('Aborting javascript');
   

但没有什么对我有用。我只想立即刷新页面,而不是等到我的 URL 上的 xhr 请求完成(因为有时需要几分钟);

【问题讨论】:

您的控制台中是否出现任何 javascript 错误?看起来它可能会抛出 xhr 未定义错误。 没有。我没有收到任何错误。我只在使用 throw new error..to abort javascript 时得到;但它仍然等待 /ajax_controller/searchForTracks/ 上的当前 XHR 完成。我需要中止当前的等待并立即刷新。 根据$.ajax 文档,它返回一个XMLHttpRequest,它支持.abort() 方法,这正是您想要的。当您在 $(window).unload 函数中放置断点时,它是否会进入其中并正确填充 xhr $(window).unload(function() console.log(xhr); xhr.abort(); ); 我将在 2-3 分钟内将 console.log 的响应发送给您。我必须等待脚本完成加载:) 【参考方案1】:

我认为问题出在这里:

setInterval(function()
    var xhr = $.ajax(...   <---
,5000);

你正在初始化回调函数内部的变量,你所要做的就是:

var xhr;
setInterval(function()
    xhr = $.ajax(...
,5000);

然后你就可以了

console.log(xhr); // Object...

我还建议缓存 setInterval 以便您可以这样做

var myInterval =     setInterval(function()
        xhr = $.ajax(...
    ,5000);

如果你需要取消间隔,就这样做

clearTimeout(myInterval);

TLDR:这是一个范围问题。

【讨论】:

以上是关于在 jQuery 中停止 XHR 请求的主要内容,如果未能解决你的问题,请参考以下文章

XHR 中止不会停止文件上传

Chrome 中 JQuery 停止和挂起的 ajax 请求

Firefox 开发者工具中的 XHR 断点

如何在 jQuery 中停止效果

jQuery-Mobile:ajax请求在changePage失败后停止工作

如果 XHR 获得 abort(),我如何终止长时间运行的 Django 请求?