2

我已经按照这个关于如何在页面重定向上中止所有 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();
};
4

1 回答 1

0

您当时是否尝试使用等待标志来保存?

像这样 model.save(data,{wait:true});

希望这可以帮助。

于 2013-03-26T20:18:21.160 回答