Как получить фактическую ошибку из запроса AngularJS $http?

Я довольно новичок в AngularJS. Я пытаюсь получить информацию о фактической ошибке, возникшей во время запроса GET. У меня запрос настроен так:

$http.get(myUrl).then(mySuccessFunction).catch(function(reason) {
    //
});

Объект reason, который передается в catch, имеет 5 свойств:

  1. config — содержит информацию об отправленном мной запросе (URL, метод и т. д.)
  2. заголовки
  3. данные - всегда кажутся нулевыми, независимо от возникшей ошибки
  4. статус - всегда кажется 0, независимо от возникшей ошибки
  5. statusText - всегда кажется "", вне зависимости от возникшей ошибки

Я также рассматривал использование техники $http.get(url).success().error(), но функция error() обычно передает ту же (на первый взгляд бесполезную) информацию, только в форме параметра, а не в виде свойств одного объекта.

Из консоли браузера я вижу, что запрос вызывает статус 500 или ERR_CONNECTION_REFUSED и т. д. Однако я не вижу, как получить эту информацию из объекта reason...

Как получить информацию о фактической ошибке, возникшей во время запроса?


ОБНОВЛЕНИЕ:
Я обнаружил, что для меня проблема на самом деле была проблемой CORS. Смотрите мой ответ ниже.


person Troy    schedule 06.11.2014    source источник


Ответы (3)


Я обнаружил, что в моем случае проблема заключалась в проблеме CORS, которая скрывала реальную проблему.

Прежде чем опубликовать вопрос, я тестировал 2 случая ошибок:

  1. Сервер недоступен (ERR_CONNECTION_REFUSED)
  2. Сервер обнаружил внутреннюю ошибку (статус 500)

Оба состояния ошибки давали мне точно такие же данные «ошибки» (null/0/"" для data/status/statusText) через функцию angular catch/error. Для (1) null/0/"" является правильным ответом. Для (2), когда мой сервер разработки (намеренно) запускал ответ статуса 500, он неправильно обрабатывал CORS для этого ответа об ошибке.

Очевидно, что для проблем CORS значение null/0/"" также является правильными данными об "ошибке" для GET, сгенерированного Angular.

После публикации этого вопроса я попробовал другие условия ошибки (404 и т. д.) и начал получать больше полезных данных, передаваемых в функцию перехвата/ошибки.

person Troy    schedule 07.11.2014

$http.get('/someUrl').success(function(data, status, headers, config) {

}).
error(function(data, status, headers, config) {

});

переменная состояния должна предоставлять код ошибки, а заголовки должны предоставлять более подробную информацию о запросе.

person Bioto    schedule 06.11.2014
comment
Спасибо за ответ. В своем вопросе я указал, что уже пробовал метод успеха/ошибки вместо метода then/catch. Методу успеха/ошибки предоставляется та же информация, что и методу then/catch, только в другом формате, и в моем случае он по-прежнему давал мне null/0/ для data/status/statusText соответственно. Настоящей проблемой была проблема CORS. Смотрите мой другой опубликованный ответ. - person Troy; 07.11.2014

вот работа, чтобы получить StatusText (как указано, что некоторые мобильные браузеры удаляют ДАННЫЕ из успешных ответов: https://stackoverflow.com/ а/28470163/1586498

Я также обнаружил, что .success и .error в $http в Angular не передают StatusText, вам нужно использовать .then(response)

person OzBob    schedule 12.02.2015