IE错过了Headers - angular $ http

时间:2016-01-09 16:46:43

标签: javascript angularjs internet-explorer

我正在尝试使用angularjs $ http从远程服务器(inaturalist.org)获取结果。服务器使用标头来指定分页信息(总条目,页面等)。

我的问题是当使用IE(Edge,IE11测试)时,我无法看到所有标题。

$http({
method  : 'GET',
url     : 'https://www.inaturalist.org/observations.json?page=1&per_page=30'})
.success(function (data, status, headers) {

   scope.headers = headers();
});

});

请参阅https://jsbin.com/rohoda/edit?js,output

任何想法都错了吗?

1 个答案:

答案 0 :(得分:4)

这是Internet Explorer的XMLHttpRequest对象实现中的错误。由于您正在进行跨域请求,因此适用CORS规则。这是一个GET请求,因此没有必要进行飞行前OPTIONS请求。服务器正确返回以下响应头:

Access-Control-Expose-Headers: X-Per-Page, X-Total-Entries

然而您无法使用getResponseHeader()方法访问X-Total-Entries响应标头(这是header变量在成功回调中的表示。)

完全正确实现此Access-Control-Expose-Headers CORS标头的唯一浏览器是Google Chrome。

您可能会发现following article有用,尤其是Access-Control-Expose-Headers problem部分位于底部:

  

所有浏览器(Google Chrome除外)都有错误的getRequestHeader()   实现,因此即使客户端可能无法访问标头   设置Access-Control-Expose-Headers标头后。在我的例子中,   ETag标题只能在Google Chrome浏览器中访问。 Safari返回   只有简单的响应标头,而Firefox不会返回ANY   响应标题。

我担心这里唯一的解决方法是在您的域上设置一个代理脚本,它将充当您的域和远程域之间的桥梁。然后将AJAX请求发送到您自己的域,以避免使用CORS。