Если произошла ошибка при отправке данных, то данные сохраняются в локальном хранилище, и запускается функция с тайм аутом 30сек, отправляющая ожидающие данные. В блоке с ошибкой снова вызывается эта функция. Таким образом получается что каждые 30 сек идет попытка отправки, до тех пор, пока все не будет передано.
Но есть одно но: функция вызывается столько раз, сколько элементов содержится в хранилище. В общем много.
function DelayResend() {
for (var key in localStorage) {
resend1(key);
if (resend1(key) == false) {
setTimeout(DelayResend, 30 * 1000);
break;
}
}
}
function resend1(key) {
var message;
$.ajax({
type: 'POST',
url: '/Home/Form',
data: xml,
success: function (responce) {
xml = UnsucessStorage.getItem(key);
var sub = key.substr(1);
message = "Данные ожидающие отправки были успешно переданы";
if (key.includes("u")) {
UnsucessStorage.setItem("s" + sub, xml)
localStorage.removeItem(key);
notification(message);
}
},
error: function (xhr, str) {
return false;
}
})
}
Это происходит потому-что ajax запрос не успевает ответить. Как можно заставить цикл дождаться ответа?