javascript - change - ¿Cómo leer encabezados de respuesta en angularjs?
page title angular 4 (6)
¿Por qué no simplemente probar esto?
var promise = $http.get(url, {
params: query
}).then(function(response) {
console.log(''Content-Range: '' + response.headers(''Content-Range''));
return response.data;
});
Especialmente si desea devolver la
promise
para que pueda ser parte de una cadena de promesas.
Mi servidor devuelve este tipo de encabezado:
Content-Range:0-10/0
:
Traté de leer este encabezado en angular sin suerte:
var promise = $http.get(url, {
params: query
}).then(function(response) {
console.log(response.headers());
return response.data;
});
que solo imprime
Object {content-type: "application/json; charset=utf-8"}
¿Alguna idea de cómo acceder al encabezado del rango de contenido?
Actualizado según la respuesta 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.
});
Además de la respuesta de Eugene Retunsky, citando la documentación de $ http con respecto a la respuesta:
El objeto de respuesta tiene estas propiedades:
data -
{string|Object}- El cuerpo de respuesta transformado con las funciones de transformación.estado -
{number}- Código de estado HTTP de la respuesta.encabezados -
{function([headerName])}- Función captadora del encabezado.config -
{Object}: el objeto de configuración que se utilizó para generar la solicitud.statusText -
{string}- Texto de estado HTTP de la respuesta.
Tenga en cuenta que el orden de devolución de llamada de argumento para $resource (v1.6) no es el mismo que el anterior:
La devolución de llamada exitosa se llama con argumentos
(value (Object|Array), responseHeaders (Function), status (number), statusText (string)), donde el valor es la instancia de recurso poblada o el objeto de colección. La devolución de llamada de error se llama con el argumento(httpResponse).
De acuerdo con los encabezados personalizados MDN no están expuestos por defecto. El administrador del servidor debe exponerlos usando "Access-Control-Expose-Headers" de la misma manera que se ocupa de "access-control-allow-origin"
Consulte este enlace de MDN para confirmar [ https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers]
Los encabezados de respuesta en caso de cors permanecen ocultos. Debe agregar encabezados de respuesta para dirigir Angular para exponer encabezados a 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'');
Utilice la variable de
headers
en devoluciones de llamada de éxito y error
$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.
});
Si está en el mismo dominio, debería poder recuperar los encabezados de respuesta.
Si es de dominio cruzado, deberá agregar el
Access-Control-Expose-Headers
en el servidor.
Access-Control-Expose-Headers: content-type, cache, ...