在 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 请求的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 中 JQuery 停止和挂起的 ajax 请求