Javascript AJAX调用在使用Backbone.js完成之前被中止

Javascript AJAX调用在使用Backbone.js完成之前被中止,javascript,jquery,ajax,backbone.js,onbeforeunload,Javascript,Jquery,Ajax,Backbone.js,Onbeforeunload,接下来我介绍了如何中止页面重定向上的所有AJAX请求。它基本上使用ajaxSend将xhr请求对象添加到数组中,然后使用ajaxComplete将该对象从数组中删除,然后如果页面重定向,它将在该数组中循环并中止浏览器仍在等待的每个请求 这对于使用$.AJAX({})的所有普通AJAX请求都很有效。但是,如果像model.save()一样调用主干AJAX请求,那么window.onbeforeunload函数将在任何事情发生之前执行,并导致model.save()在事件发送到服务器之前中止 有人知

接下来我介绍了如何中止页面重定向上的所有AJAX请求。它基本上使用ajaxSend将xhr请求对象添加到数组中,然后使用ajaxComplete将该对象从数组中删除,然后如果页面重定向,它将在该数组中循环并中止浏览器仍在等待的每个请求

这对于使用$.AJAX({})的所有普通AJAX请求都很有效。但是,如果像model.save()一样调用主干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();
};

您是否尝试在保存时使用等待标志

像这样 save(数据,{wait:true})

希望这有帮助