2013-03-18 79 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});

希望这会有所帮助。