如何读取angularjs中的响应头?

时间:2015-03-02 08:42:43

标签: javascript angularjs angular-http

我的服务器返回这种标题:Content-Range:0-10/0

enter image description here

我尝试以角度读取此标题但没有运气:

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"}

有关如何访问内容范围标题的任何想法吗?

7 个答案:

答案 0 :(得分:39)

成功使用headers变量和错误回调

From documentation

$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');

来源:https://github.com/angular/angular/issues/5237

答案 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)

response.headers();

将为您提供所有标头(默认和海关)。为我工作!!

enter image description here

enter image description here

注意。我只在同一个域上进行了测试。我们可能需要在服务器上添加Access-Control-Expose-Headers标头以进行跨域访问。