【发布时间】:2018-06-08 17:14:08
【问题描述】:
我有一个奇怪的问题,我已经解决了几天。
问题与跨域资源共享(CORS)有关,我正在发出 Angular GET 请求,并且能够在 Firefox/Chrome 的开发人员工具中看到收到 JSON 响应正文,但是 JavaScript(或浏览器,或服务器)拒绝将响应正文交给我。
这是我的要求:
$http = angular.injector(["ng"]).get("$http"); //angular http object
$http = angular.injector(["ng"]).get("$http");
$http({
method: 'GET',
url: 'api.example.com/myPath',
headers: {
'Content-Type': 'application/json',
}
}).then(function successCallback(response) {
alert("succeed: db "+JSON.stringify(response)); //this is not called
}, function errorCallback(response) {
alert("failed: " + JSON.stringify(response));//this is called
});
如 cmets 中所述,调用失败函数而不是成功函数。 我可以提及/发布我到过这里的 Stack-overflow 和其他链接,但其中有 50 个,所以这里是其中的一些:
我尝试过的标题(除了代码中显示的):
"headers": {
'Content-Type': 'application/json',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Origin': '*'
}
"headers": {
'Content-Type': 'application/json',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Origin': '*'
}
"headers": {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Origin': '*'
}
"headers": {
'Accept': 'application/json',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Origin': '*'
}
"headers": {
'Accept': 'application/json',
'Access-Control-Allow-Origin': '*'
}
尝试了以上所有方法,其中一些将不会收到 JSON 响应,而是发送 OPTIONS 请求并停止。
这是 Firefox 输出的样子:
这是警报功能的输出:
failed: {"data":null,"status":-1,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","url":"api.example.com/myPath","headers":{"Accept":"application/json, text/plain, */*"}},"statusText":"","xhrStatus":"error"}
我尝试过的其他事情: 为 Chrome 安装名为 CORS 的插件:Was not effective at all, no difference
注意 Endpoints 服务器不是 NodeJS,它是 Java,我在网上遇到的大多数答案都建议在服务器上添加这些 headers,但我的同事 坚持使用前端Angular可以解决这个问题(特别是在他们看到正确的响应主体Json信息实际上来自服务器后,如附图所示)
【问题讨论】:
-
如果你可以在浏览器中看到它,那么这意味着后端是好的并且没有一个cors prob
-
你用的是哪个版本的angularjs?
-
不确定我使用的是哪个版本,因为我使用 NPM 安装它,我使用的是这个包:npmjs.com/package/angular 然后在 HTML 中包含文件路径
标签: javascript angularjs rest http access-control