2

ページリダイレクトですべての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();
};
4

1 に答える 1

0

保存時に待機フラグを使用してみましたか?

このように model.save(data,{wait:true});

お役に立てれば。

于 2013-03-26T20:18:21.160 に答える