Javascript 如何在angularjs中读取响应头?
我的服务器返回此类标题:Javascript 如何在angularjs中读取响应头?,javascript,angularjs,angular-http,Javascript,Angularjs,Angular Http,我的服务器返回此类标题:内容范围: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-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"}
您知道如何访问内容范围标题吗?在成功和错误回调中使用
标题
变量
如果您在同一个域上,您应该能够检索回响应头。如果跨域,则需要在服务器上添加标头
Access-Control-Expose-Headers: content-type, cache, ...
根据穆罕默德的回答更新
$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.
});
为什么不试试这个呢:
var promise = $http.get(url, {
params: query
}).then(function(response) {
console.log('Content-Range: ' + response.headers('Content-Range'));
return response.data;
});
特别是如果您想返回
承诺
,使其成为承诺链的一部分。除了Eugene Retunsky的回答之外,还引用了有关回复的文档:
响应对象具有以下属性:
- 数据–
–使用转换函数转换的响应体{string | Object}
- 状态–
–响应的HTTP状态代码{number}
- 标题–
–标题获取函数{function([headerName])}
- config–
–用于生成请求的配置对象{Object}
- 状态文本–
–响应的HTTP状态文本{string}
(value(Object | Array)、responseHeaders(Function)、status(number)、statusText(string))
参数调用成功回调,其中值是填充的资源实例或集合对象。使用(httpResponse)
参数调用错误回调
COR情况下的响应标头保持隐藏。 您需要添加响应头,以指示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');
来源:根据MDN,默认情况下不公开自定义头。服务器管理员需要使用“Access Control expose Header”来公开它们,其方式与处理“Access Control allow origin”的方式相同 请参阅此MDN链接以获得确认 [ 将给你所有的标题(德乌拉和海关)。为我工作
注意。我只在同一个域上进行了测试。我们可能需要在服务器上为跨域添加
访问控制公开头
头。这仍然没有给我响应头,只有请求头。我已经启用了跨域。问题中的屏幕截图显示内容范围头是在chrome inspector的响应中。因此服务器不是问题所在。是的,CORS默认返回某些标头。您需要告诉它哪些其他标头可以通过api安全公开。成功调用似乎已被弃用,不应使用。检查文档:这不再有效!请参阅:给出(+1)因为response
有一个headers()
方法,该方法采用name
参数。但这是我的问题;我无法通过response.headers('Authorization')
检索Authorization
头[或任何其他]授权,即使我可以看到response.config.headers['Authorization']
一目了然!!!这个函数到底是干什么用的???是跨域请求吗?您可能不应该使用像这样的单个请求中的授权。使用拦截器进行授权stuff@EugeneRetunsky:我有跨域请求。我可以看到响应中的授权标头,但现在可以获取它。无论如何,我可以这样做,因为API正在返回令牌以成功进行身份验证。authorization
是常见的请求标头。我有一个ver将其视为响应标题。您确定它确实在您的响应中吗?response.config.headers
可能指的是请求,而不是响应。
// 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');
response.headers();