Извлечение конкретного сообщения заголовка из заголовков ответа $ http

0

Я (данные, статус, заголовки, config, statusText) использует $ http.post() для вызова сервера в приложении. Код сервера находится в.net. Для конкретного случая использования, когда процесс выходит из строя, сервер возвращает бизнес-исключение вместе с сообщением.

Теперь я вижу сообщение, которое печатается в консоли Chrome красным цветом, а также код 404. Также я вижу сообщение в разделе заголовка Fiddler сверху, так как "HTTP/1.1 404 Message is here". Но я не понимаю, как извлечь это сообщение из заголовков ответов.

Я попробовал следующее:

$http.get(requestURL).success(
                function (data,status,headers,config,statusText) {
                    //deferred.resolve(data);
                    console.log("In service",data,status,headers,config,statusText);
                }).error(
                function (data, status, headers, config, statusText) {
                    //deferred.reject(data);
                    console.log(data, status, headers, config, statusText);
                });

Заголовки печатаются в консоли как функция, "функция анонимная (имя)" Мне нужна помощь в извлечении из нее чего-либо (если это вообще возможно). СтатусText печатается как неопределенный. Мне действительно нужна помощь здесь, так как мне нужно отобразить отправленное сообщение пользователям.

Если это имеет значение: сообщение отправляется в свойство reasonPhrase с сервера

Теги:
http

2 ответа

1

Я не знаю, какую версию angularjs вы используете, но "традиционный" success и обратный вызов error устарели.

Пожалуйста, рассмотрите новый подход с .then(...) см. Здесь: https://docs.angularjs.org/api/ng/service/$http

Но чтобы ответить на ваш вопрос: параметр headers в функции обратного вызова представляет собой getter, поэтому вам нужно называть его: headers(). Вы также можете применить к нему параметр (конкретный заголовок).

  • 0
    Добавьте, что .then работает со старым Angular см. Обновление для Legacy AngularJS v1.2
  • 1
    Спасибо за подсказку, не знал об этом. Таким образом, нет причин оставаться со старым синтаксисом @Saurabh - вы также найдете больше документов о новом подходе.
1

Прежде всего, методы .success и .error устарели. Вы должны использовать .then.

Полная информация доступна на этой странице - https://docs.angularjs.org/api/ng/service/$http

В вашем примере вы должны использовать что-то вроде этого:

$http.get(requestUrl).then(function (response) {
  // success handling
  console.log(response.headers());
}, function (response) {
  // error handling
  console.log(response.headers());
});

response.headers - это функция. Когда вы вызываете его (var headers = response.headers();), он возвращает объект, содержащий заголовки из ответа HTTP.

В соответствии с подробной информацией на странице, указанной выше, в объекте ответа вы имеете доступ к следующему:

  • data - {string|Object} - тело ответа, преобразованное функциями преобразования.
  • status - {number} - код статуса HTTP ответа.
  • headers - {function([headerName])} - Функция получения заголовка.
  • config - {Object} - объект конфигурации, который использовался для генерации запроса.
  • statusText - {string} - текст ответа HTTP-ответа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню