有沒有辦法在請求對象沒有句柄的情況下全局中止所有的Ajax請求?全局中止所有jQuery AJAX請求
我問的原因是我們有一個相當複雜的應用程序,我們使用setTimeOut()在後臺運行多個不同的Ajax請求。如果用戶點擊某個按鈕,我們需要停止所有正在進行的請求。
有沒有辦法在請求對象沒有句柄的情況下全局中止所有的Ajax請求?全局中止所有jQuery AJAX請求
我問的原因是我們有一個相當複雜的應用程序,我們使用setTimeOut()在後臺運行多個不同的Ajax請求。如果用戶點擊某個按鈕,我們需要停止所有正在進行的請求。
你需要調用abort()
方法:
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){..........}
});
之後,你可以中止請求:
request.abort();
這樣,你需要創建一個變量爲您的Ajax請求,然後就可以使用在任何時候中止請求的abort
方法。
也看看:
要中止多個ajax請求嘗試:http:// stackoverflow .com/a/42312101/3818394 – 2017-02-18 07:01:51
你不能中止所有活動的Ajax請求,如果您不跟蹤把手給他們。
但是,如果您正在跟蹤它,那麼您可以通過循環處理程序並在每個處理程序上調用.abort()
來做到這一點。
你可以使用這個腳本:
// $.xhrPool and $.ajaxSetup are the solution
$.xhrPool = [];
$.xhrPool.abortAll = function() {
$(this).each(function(idx, jqXHR) {
jqXHR.abort();
});
$.xhrPool = [];
};
$.ajaxSetup({
beforeSend: function(jqXHR) {
$.xhrPool.push(jqXHR);
},
complete: function(jqXHR) {
var index = $.xhrPool.indexOf(jqXHR);
if (index > -1) {
$.xhrPool.splice(index, 1);
}
}
});
您複製了[here](http://stackoverflow.com/a/8841412/1767377)並將其粘貼到此處。雖然我很欣賞jsfiddle ** - 1,因爲你沒有在信用到期時給予信用。**而現在對於電影報價:「羞辱你,侮辱你的牛,侮辱你的叔叔......「-Mulan – SyntaxRules 2013-08-08 15:53:57
abortAll方法在這裏只能使用一次,因爲$ .xhrPool = [];會銷燬方法,如果你想多次使用它,你可以使用$ .xhrPool.length = 0;而不是 – igrek 2013-10-02 11:49:57
有關詳細信息,請參閱http://stackoverflow.com/questions/1232040/how-to-empty-an-array-in-javascript – igrek 2013-10-02 11:54:42
這回答一個相關的問題是對我工作:
https://stackoverflow.com/a/10701856/5114
注意的第一線,其中@grr說:「使用ajaxSetup不正確」
您可以調整自己的如果你想自己打電話而不是像他們一樣使用window.onbeforeunload
,那麼你可以將自己的功能添加到窗口中。
// Most of this is copied from @grr verbatim:
(function($) {
var xhrPool = [];
$(document).ajaxSend(function(e, jqXHR, options){
xhrPool.push(jqXHR);
});
$(document).ajaxComplete(function(e, jqXHR, options) {
xhrPool = $.grep(xhrPool, function(x){return x!=jqXHR});
});
// I changed the name of the abort function here:
window.abortAllMyAjaxRequests = function() {
$.each(xhrPool, function(idx, jqXHR) {
jqXHR.abort();
});
};
})(jQuery);
然後您可以撥打window.abortAllMyAjaxRequests();
中止它們全部。確保你將一個.fail(jqXHRFailCallback)
添加到你的ajax請求中。回調將得到「中止」作爲textStatus
所以你知道發生了什麼:
function jqXHRFailCallback(jqXHR, textStatus){
// textStatus === 'abort'
}
使用ajaxSetup不是「錯誤」,但你不知道它會發生導致問題,直到它......並且有時當它發生時,真的很難記住它是與你混淆的ajaxSetup。:-) +1這個答案不使用ajaxSetup。 – 2016-04-22 14:57:05
的可能重複[停止jQuery中所有活動的Ajax請求(http://stackoverflow.com/questions/1802936/stop-all- activejax-requests-in-jquery) – Shoban 2010-08-11 08:07:05
@shoban,但我認爲如果你沒有處理它們,RobertW會問是否有辦法。 – 7wp 2010-08-11 08:10:29
此問題可能爲您提供您正在尋找什麼http://stackoverflow.com/questions/1802936/stop-all-active-ajax-requests-in-jquery – codingbadger 2010-08-11 08:04:09