2013-03-18 81 views
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(); 
}; 

回答

0

做您嘗試使用等待標誌的時候救?

這樣的 model.save(data,{wait:true});

希望這會有所幫助。