Как скачать файл через XMLHttpRequest?

Не получается скачать файл с сервера. Сервер выдает коды состояния в консоль в таком порядке(readyState, status):
2 200 - сервер ответил
3 200 - файл загружается
4 200 - файл скачался
Когда получаю состояние 2, очищаю таймер, затем ожидаю состояния 4. Но этот код почему то не работает. Что я не так делаю?
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
var timeout = setTimeout(function(){
xhr.abort();
console.log( "Сервер не отвечает.");
},5000);
xhr.onreadystatechange = function(){
console.log(xhr.readyState,xhr.status); // показать код состояния и статуса
if(xhr.readyState != 2) return;
clearTimeout(timeout);
if(xhr.readyState == 4){
if(xhr.status == 200){
// скачать файл. Этот код не выполняется
} else {
// вывести ошибку
}
}
}
  • Вопрос задан
  • 4998 просмотров
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
if(xhr.readyState != 2) return;
Функция вызывается при каждой смене readyState. Это значит, что когда readyState будет равен 4, функция выполнит возврат.

xhr.onreadystatechange = function (data) {
	if (this.readyState == 2) {
		clearTimeout(timeout);
	} else if (this.readyState == 4) {
		if(this.status == 200){
			console.log(data);
		} else {
			// вывести ошибку
		}
	}
}


Кстати, современные браузеры поддерживают timeout в экземплярах XMLHttpRequest (кроме... Safari:)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы