Подтвердить что ты не робот

Как читать заголовки ответов в angularjs?

Мой сервер возвращает такой заголовок: Content-Range:0-10/0:

enter image description here

Я попытался прочитать этот заголовок в angular без везения:

var promise = $http.get(url, {
    params: query
}).then(function(response) {
  console.log(response.headers());
  return response.data;
});

который просто печатает

Object {content-type: "application/json; charset=utf-8"}

Любые идеи о том, как получить доступ к заголовку диапазона содержимого?

4b9b3361

Ответ 1

Используйте переменную headers при успешном выполнении и обратные вызовы

Из документации.

$http.get('/someUrl').
  success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
  })
  .error(function(data, status, headers, config) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

Если вы находитесь в одном домене, вы сможете вернуть заголовки ответов. Если кросс-домен, вам нужно будет добавить заголовок Access-Control-Expose-Headers на сервере.

Access-Control-Expose-Headers: content-type, cache, ...

Ответ 2

Почему бы просто не попробовать:

var promise = $http.get(url, {
    params: query
}).then(function(response) {
  console.log('Content-Range: ' + response.headers('Content-Range'));
  return response.data;
});

Особенно если вы хотите вернуть promise, чтобы он мог быть частью цепочки promises.

Ответ 3

Обновлено на основе ответа Мухаммада...

$http.get('/someUrl').
  success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
    console.log(headers()['Content-Range']);
  })
  .error(function(data, status, headers, config) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

Ответ 4

Кроме ответа Юджина Ретунского, цитируя $http документацию относительно ответа:

Объект ответа имеет следующие свойства:

  • data​​strong > - {string|Object} - Тело ответа преобразуется с функциями преобразования.

  • статус - {number} - код состояния HTTP для ответа.

  • заголовки - {function([headerName])} - функция получателя заголовка.

  • config - {Object} - объект конфигурации, который использовался для генерации запроса.

  • statusText - {string} - текст ответа HTTP-ответа.

Обратите внимание, что порядок обратного вызова аргумента для $resource (v1.6) не совпадает с как выше:

Обратный вызов успеха вызывается с аргументами (value (Object|Array), responseHeaders (Function), status (number), statusText (string)), где значение представляет собой заполненный экземпляр ресурса или объект коллекции. Обратный вызов ошибки вызывается с аргументом (httpResponse).

Ответ 5

Заголовки ответов в случае cors остаются скрытыми. Вам нужно добавить заголовки ответов, чтобы направить Angular, чтобы открыть заголовки для javascript.

// From server response headers :
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, 
Content-Type, Accept, Authorization, X-Custom-header");
header("Access-Control-Expose-Headers: X-Custom-header");
header("X-Custom-header: $some data");

var data = res.headers.get('X-Custom-header');

Источник: https://github.com/angular/angular/issues/5237