1
我已經按照此answer關於如何中止頁面重定向上的所有AJAX請求。它基本上使用ajaxSend將xhr請求對象添加到數組,然後ajaxComplete從數組中刪除該對象,然後如果頁面被重定向,它將循環訪問該數組並放棄瀏覽器仍在等待的每個請求。AJAX調用在完成Backbone.js之前被中止
對於使用$ .ajax({})的所有常規AJAX請求,此工作正常。但是,如果一個Backbone AJAX請求被調用爲model.save(),那麼window.onbeforeunload函數會在發生任何事情之前執行,並導致model.save()在事件發送到服務器之前中止。
任何人有任何想法如何解決這個問題或爲什麼window.onbeforeunload函數被調用?
這裏是我從鏈接的回答得到了代碼:
var xhrPool = [];
$.xhrPool = {};
$.xhrPool.abortAll = function() {
$.each(xhrPool, function (idx, jqXHR) {
jqXHR.abort();
});
xhrPool.length = 0;
};
$(document).ajaxSend(function (e, jqXHR, options) {
xhrPool.push(jqXHR);
});
$(document).ajaxComplete(function (e, jqXHR, options) {
xhrPool = $.grep(xhrPool, function (x) {
return x != jqXHR;
});
});
window.onbeforeunload = function() {
$.xhrPool.abortAll();
};