好吧,您可以使用 jQuery 克隆对象,然后在浏览器重新联机时重新启动调用
// Deep copy
var savedXhr= jQuery.extend(true, {}, xhr);
不知道这是否真的有效,你可以试试
编辑 - 好的,我试过了,没办法,你不能在那个对象上调用 send() 。这是因为xhr
不是原始请求,而是由 jQuery 创建的“假”对象。另一种方法可能是:保存设置对象,然后使用这些设置启动另一个 $.ajax 调用。基本上你会
var settingsSaved;
$(document).ajaxSend(function(event, xhr, settings, response) {
if (!navigator.onLine) {
settingsSaved = jQuery.extend(true, {}, settings);
xhr.abort();
} else {
//Send the request with the old settings
$.ajax(settingsSaved);
//abort the new request
xhr.abort();
}
}
要非常小心,这需要准确的流控制,因为每次调用 $.ajax 时都会触发另一个事件……也许您可以简单地使用对象中的值ajaxSend
开始一个新事件。XMLHTTPRequest
settingsSaved
看这个fiddle,第一次点击按钮,调用就中止了。第二次通话以旧设置开始,从那时起所有请求都正常
http://jsfiddle.net/hFmWX/