Что ж, вы можете клонировать объект с помощью 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
объект.
Посмотрите на эту скрипку, при первом нажатии кнопки звонок прерывается. Второй раз звонок начинается со старых настроек и с этого момента все запросы в норме
http://jsfiddle.net/hFmWX/