2015-03-02 2 views
26

Мой сервер возвращает этот вид заголовка: Content-Range:0-10/0:Как читать заголовки ответов в angularjs?

enter image description here

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

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"} 

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

ответ

30

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

From documentation.

$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, ... 
+0

Это еще не дает мне заголовки ответа, только заголовки запроса. –

+0

Обновлен ответ. –

+0

У меня уже включен междоменный домен. Снимок экрана в моем вопросе показывает, что заголовок диапазона содержимого находится внутри ответа в хромовом инспекторе. Таким образом, сервер не проблема. –

9

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

$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. 
    }); 
22

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

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

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

+2

Предоставление (+1), потому что 'response' имеет метод' headers() ', который принимает параметр' name'. Это моя проблема; Я не могу получить заголовок 'Authorization' [или любые другие] через' response.headers ('Authorization') 'даже когда я вижу' response.config.headers ['Authorization'] 'на виду! Что это за мир? – Cody

+0

Это междоменный запрос? –

+0

Возможно, вы не должны работать с Утечением в одном запросе, подобном этому. Используйте перехватчик для материалов авторизации –

5

В дополнение к ответу Евгений Retunsky, в цитирую $http документации относительно ответа:

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

  • данные - {string|Object} - тело ответа преобразованные с преобразования.

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

  • headers - {function([headerName])} - Header getter function.

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

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

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

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

0

Ответные заголовки в случае защиты остаются скрытыми. Вам нужно добавить заголовки ответов, чтобы направить угловое, чтобы выставить заголовки на 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

Смежные вопросы