dollar
@dollar
Делай добро и бросай его в воду.

Как определить, что загрузка через XMLHttpRequest не идёт?

Для теста №1 пытаюсь загрузить большие данные. Отправляю запрос, через 30 секунд получаю ответ. Всё хорошо.
Код:
let start = ((new Date()).getTime() / 1000);
function load_String_From_URL(url) {
	let xhttp = new XMLHttpRequest();
	xhttp.onreadystatechange = function() {
		let now = ((new Date()).getTime() / 1000);
		console.log((now-start).toFixed(2),"Stage:", this.readyState, this.status);
		if (this.readyState == 4 && this.status == 200) {
			console.log((now-start).toFixed(2),"Loaded:", url);
			//success
		}
	};
	xhttp.open("GET", url, true);
	xhttp.send();
}
load_String_From_URL("http://api.antizapret.info/all.php?type=json")

Вывод:
5bb320540abad581067614.png

А теперь тест №2 - отправляю запрос и вытаскиваю сетевой кабель из компьютера (отключение от Интернета).
Результат:
5bb3239997147831858763.png

Проходит час, два, 10 часов. Больше никаких сигналов от XMLHttpRequest не поступает. Ни успеха, ни ошибки, замыкание просто висит.
Как быть? А вдруг он там по 1 байту в минуту загружается? Ну, слабый Интернет в деревне у бабушки, бывает. Надо всего лишь подождать неделю. Если так, то нехорошо после 10 часов прервать по таймауту.
Есть ли надёжный способ определить, что данные не идут?
  • Вопрос задан
  • 231 просмотр
Решения вопроса 1
uiworks
@uiworks
xhr.timeout = 30000; 
xhr.ontimeout = function() {
  //обработка
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BRAGA96
@BRAGA96
Как вариант проверять соединения с интернетом: window.navigator.onLine
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы