我已经按照这个关于如何在页面重定向上中止所有 AJAX 请求的答案进行操作。它基本上使用 ajaxSend 将 xhr 请求对象添加到数组中,然后使用 ajaxComplete 从数组中删除该对象,然后如果页面被重定向,它将遍历该数组并中止浏览器仍在等待的每个请求。
这适用于所有使用 $.ajax({}) 的普通 AJAX 请求。但是,如果像 model.save() 一样调用 Backbone AJAX 请求,则 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();
};