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();
};