ページリダイレクトですべてのAJAXリクエストを中止する方法について、この回答に従いました。基本的に ajaxSend を使用して xhr リクエスト オブジェクトを配列に追加し、次に ajaxComplete を使用してそのオブジェクトを配列から削除します。ページがリダイレクトされると、その配列をループし、ブラウザがまだ待機している各リクエストを中止します。
これは、$.ajax({}) を使用するすべての通常の AJAX リクエストに対して正常に機能します。ただし、バックボーン 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();
};