Meu servidor retorna esse tipo de header: Content-Range:0-10/0
:
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');
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