Como ler headers de resposta em angularjs?

Meu servidor retorna esse tipo de header: Content-Range:0-10/0 :

insira a descrição da imagem aqui

Eu tentei ler este header em angular sem sorte:

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

que apenas imprime

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

Alguma idéia de como acessar o header do intervalo de conteúdo?

Use a variável headers em callbacks de sucesso e erro

Da documentação .

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

Se você estiver no mesmo domínio, poderá recuperar os headers de resposta. Se for de domínio cruzado, você precisará adicionar o header Access-Control-Expose-Headers no servidor.

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

Por que não simplesmente tentar isso:

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

Especialmente se você quiser devolver a promise para que possa fazer parte de uma cadeia de promises.

Atualizado com base na resposta de Muhammad …

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

Além da resposta de Eugene Retunsky, citando a documentação do $ http sobre a resposta:

O object de resposta possui estas propriedades:

  • data{string|Object} – O corpo da resposta transformado com as funções de transformação.

  • status{number} – código de status HTTP da resposta.

  • headers{function([headerName])} – Função de leitura de header.

  • config{Object} – O object de configuração que foi usado para gerar a solicitação.

  • statusText{string} – texto de status HTTP da resposta.

Por favor, note que a ordem de retorno do argumento para $ resource (v1.6) não é a mesma que acima:

O retorno de chamada de sucesso é chamado com (value (Object|Array), responseHeaders (Function), status (number), statusText (string)) argumentos (value (Object|Array), responseHeaders (Function), status (number), statusText (string)) , em que o valor é a instância de recurso populada ou object de coleção. O retorno de chamada de erro é chamado com o argumento (httpResponse) .

Os headers de resposta no caso de cors permanecem ocultos. Você precisa adicionar headers de resposta para direcionar o Angular para expor os headers ao 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'); 

Fonte: https://github.com/angular/angular/issues/5237

De acordo com os headers personalizados do MDN, não são expostos por padrão. O administrador do servidor precisa expô-los usando “Access-Control-Expose-Headers” da mesma maneira que eles lidam com “access-control-allow-origin”

Veja este link MDN para confirmação [ https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Headers/Access-Control-Expose-Headers%5D

Intereting Posts