【发布时间】:2017-01-19 03:59:09
【问题描述】:
我基本上像这样调用get 请求:
var resource = $resource('/api/v1/categories/:id')
resource.get({id: 1}).$promise.then(function(data){
console.log(data)
})
这很好用.. 但是我如何获取响应标头?
【问题讨论】:
标签: angularjs http angular-resource
我基本上像这样调用get 请求:
var resource = $resource('/api/v1/categories/:id')
resource.get({id: 1}).$promise.then(function(data){
console.log(data)
})
这很好用.. 但是我如何获取响应标头?
【问题讨论】:
标签: angularjs http angular-resource
您可以使用 transformResponse 操作 defined here 这将允许您添加标题
$resource('/', {}, {
get: {
method: 'GET',
transformResponse: function(data, headers){
response = {}
response.data = data;
response.headers = headers();
return response;
}
}
在此处查看工作示例JSFiddle
【讨论】:
headersGetter 函数。请参阅下面或此处的答案:docs.angularjs.org/api/ngResource/service/$resource
@Martin 的答案适用于相同的域请求。因此,我想在他的回答中补充一点,如果您使用跨域请求,则必须添加另一个带有 Access-Control-Expose-Headers: X-Blah, X-Bla 的标头以及 Access-Control-Allow-Origin:* 标头。
其中X-Blah 和X-Bla 是自定义标头。
您也不需要使用转换请求来获取标头。您可以使用以下代码:
var resource = $resource('/api/v1/categories/:id')
resource.get({id: 1}, function(data, headersFun){
console.log(data, headersFun());
})
见this小提琴。 希望这会有所帮助!!!
【讨论】:
then 函数中的第二个参数更相关——因为你的跨域信息,我差点错过了!
get 调用,在这种情况下, headersFun 存在。但是正如你上面写的那样通过$promise.then处理响应没有这样的第二个参数-headersFun是未定义的。
老问题,但我认为值得一提以供将来参考。 角度文档中有“官方”解决方案:
值得注意的是get、query等的成功回调 方法也会在来自服务器的响应中传递 作为 $http header getter 函数,所以可以重写上面的 示例并通过以下方式访问 http 标头:
var User = $resource('/user/:userId', {userId:'@id'});
var users = User.query({}, function(users, responseHeaders){
// ...
console.log(responseHeaders('x-app-pagination-current-page'));
});
(为了清晰起见,文档中的代码略有更新)
对于 CORS 请求,需要公开其他答案中提到的标头。
【讨论】: