enovot
@enovot

Почему try..catch не отлавливает ошибку?

Добрый вечер!
Хочу чтобы мой код отловил ошибку, а он этого не делает. Почему?
var req = new XMLHttpRequest();
var url = 'http://google.com/?callback=callback';
req.open("GET", url, true);
try 
{
  req.send();
} 
catch(e) 
{
  console.log(e);
};
  • Вопрос задан
  • 3094 просмотра
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
эм.... ну так исключения send не кидало, так с чего бы этому коду работать? Для обработки ошибок у XHR есть колбэк onreadystatechange.

Если вам нужно трэкать ошибки в callback (у вас же jsonp используется) - то там и ловите.
Ответ написан
nowm
@nowm
Проблема в том, что XMLHttpRequest выкидывает только два исключения:

exception XMLHttpRequestException {
  unsigned short     code;
};
const unsigned short NETWORK_ERR = 101;
const unsigned short ABORT_ERR = 102;


NETWORK_ERR — ошибка сети.
ABORT_ERR — пользователь отменил запрос.

Ещё один немаловажный момент: NETWORK_ERR и ABORT_ERR не выкидываются в асинхронном режиме.

Всё остальное отлавливаться не будет, и нужно писать свой обработчик, который, например, будет реагировать на код ответа 404 от сервера и т.д.

function test(data) {
 // taking care of data
}

function handler() {
 if(this.readyState == 4 && this.status == 200) {
  // so far so good
  if(this.responseXML != null && this.responseXML.getElementById('test').firstChild.data)
     // success!
   test(this.responseXML.getElementById('test').firstChild.data);
  else
   test(null);
 } else if (this.readyState == 4 && this.status != 200) {
  // fetched the wrong page or network error...
  test(null);
 }
}

var client = new XMLHttpRequest();
client.onreadystatechange = handler;
client.open("GET", "test.xml");
client.send();


Здесь function handler() — обработчик, а client.onreadystatechange = handler; — привязка этого обработчика к экземпляру XMLHttpRequest.

Просто ответ от сервера с кодом «404 Страница не найдена» не считается за NETWORK_ERR, потому что сервер ответил на запрос. А то, с каким он кодом ответил — это уже на другом уровне обрабатывается.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@IceJOKER
Web/Android developer
**ошибся
Ответ Сергей Протько должен помочь )
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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