我的服务器返回这种标题:Content-Range:0-10/0
:
我尝试以角度读取此标题但没有运气:
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"}
有关如何访问内容范围标题的任何想法吗?
答案 0 :(得分:39)
成功使用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, ...
答案 1 :(得分:30)
为什么不试试这个:
var promise = $http.get(url, {
params: query
}).then(function(response) {
console.log('Content-Range: ' + response.headers('Content-Range'));
return response.data;
});
特别是如果您想要返回promise
,那么它可能是承诺链的一部分。
答案 2 :(得分:11)
根据穆罕默德的回答更新......
$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.
});
答案 3 :(得分:7)
除Eugene Retunsky的答案外,还引用$http文件中有关回应的内容:
响应对象具有以下属性:
数据 -
{string|Object}
- 使用转换函数转换的响应正文。状态 -
{number}
- 响应的HTTP状态代码。标题 -
{function([headerName])}
- 标头获取功能。config -
{Object}
- 用于生成请求的配置对象。statusText -
{string}
- 响应的HTTP状态文本。
请注意$resource(v1.6)的参数回调顺序与上述不一样:
使用
(value (Object|Array), responseHeaders (Function), status (number), statusText (string))
参数调用成功回调,其中值是填充的资源实例或集合对象。使用(httpResponse)
参数调用错误回调。
答案 4 :(得分:1)
在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');
答案 5 :(得分:1)
根据MDN,默认情况下不会公开自定义标头。服务器管理员需要使用" Access-Control-Expose-Headers"他们以同样的方式处理" access-control-allow-origin"
请参阅此MDN链接以进行确认 [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers]
答案 6 :(得分:0)