Javascript IE未命中标头-角度$http
我正在尝试使用angularjs$http从远程服务器(inaturalist.org)获取结果。服务器使用头指定分页信息(总条目、页面等) 我的问题是当使用IE(Edge,IE11测试)时,我看不到所有的标题Javascript IE未命中标头-角度$http,javascript,angularjs,internet-explorer,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, hea
$http({
method : 'GET',
url : 'https://www.inaturalist.org/observations.json?page=1&per_page=30'})
.success(function (data, status, headers) {
scope.headers = headers();
});
}))
看
知道怎么回事吗?这是Internet Explorer实现XMLHttpRequest对象时的一个错误。因为您正在提出跨域请求,所以CORS规则适用。这是一个GET请求,因此无需发出飞行前选项请求。服务器正确返回以下响应头:
Access-Control-Expose-Headers: X-Per-Page, X-Total-Entries
但是,您无法使用该方法访问X-Total-Entries
响应标头(这就是成功回调中的header
变量所表示的)
Google Chrome是唯一一个完全正确地实现此访问控制公开标题CORS标题的浏览器
您可能会发现下面的部分很有用,尤其是访问控制暴露标题问题
部分:
所有浏览器(Google Chrome除外)都有bug getRequestHeader()
实现,因此客户端甚至可能无法访问头
设置访问控制暴露标头后。以我为例,,
ETag头只能在Google Chrome浏览器中访问。狩猎归来
只有简单的响应头,而Firefox不返回任何响应头
响应标题
$http({
method : 'GET',
url : 'https://www.inaturalist.org/observations.json?page=1&per_page=30'})
.success(function (data, status, headers) {
scope.headers = headers();
});
恐怕这里唯一的解决办法是在您的域上设置一个代理脚本,作为您的域和远程域之间的桥梁。然后向您自己的域发出AJAX请求,以避免使用CORS。哇,这看起来像Internet Explorer的XMLHttpRequest
CORS请求实现中的一个bug。服务器正确返回Access Control Expose Headers:X-Per-Page,X-Total-Entries
响应头,但显然无法使用该方法获得X-Total-Entries
头(这就是Angular的$http
实现中的Headers
函数所表示的)。是的,我也用jQuery进行了测试,结果相同是的,jQuery和Angular都使用本机XMLHttpRequest
对象。抓得很好。但也许IE根本不支持访问控制暴露标题
CORS响应标题。请查看本文:底部有一段称为访问控制暴露标题问题
。似乎只有Google Chrome正确地实现了访问控制暴露标题
标题。