После установки тайм-аута ожидания ответа сервера перестала работать форма в браузере. Запрос нормально уходит на сервер; и сервер нормально отвечает. Но клиент ответ не принимает нормально.
С событиями
onload и
onloadend вообще не работает - после отправки запроса тупо стоит форма на месте (т. е. ничего на клиенте не происходит). С событием
onreadystatechange работает некорректно - срабатывает сразу, и после истечения тайм-аута ещё.
Как правильно записать? С событием
onload или
onloadend. Устаревшее
onreadystatechange не хочется использовать.
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
// При неуспешном ответе - завершаем процесс запроса.
if (xhr.readyState != 4) {
return;
} else {
// (Иначе) При успешном ответе (readyState = 4) - очищаем отсчёт тайм-аута.
clearTimeout(xhrTimeout);
}
// Отсчёт тайм-аута.
let xhrTimeout = setTimeout(function() {
xhr.abort()
alert('Истек тайм-аут ожидания ответа сервера.');
}, 5000);
if (xhr.status === 200) {
_функционал при успешном ответе сервера_
return;
} else {
_функционал при неуспешном ответе сервера_
return;
}
}
// При неудачном запросе (нет ответа сервера, по любой причине)
xhr.onerror = function() {
alert("Запрос не удался.");
}
xhr.open('POST', '/testRout', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send("id_Name=" + encodeURIComponent(value_Input1) + "&id_Nick=" + encodeURIComponent(value_Input2)); // Отправка запроса.