【发布时间】:2015-11-20 21:44:55
【问题描述】:
希望有人能指出我正确的方向,我已经搜索了几天但仍然没有。我试图调用不同的 API 只是为了处理返回数据,但每次调用 API 时都会遇到相同的错误:
请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'Your Site' 不允许访问。响应的 HTTP 状态代码为 404
我知道我的调用正在进行,因为对于一个特定的 API,它会跟踪我的使用情况,并说我已经成功调用了大约 5 次,所以这意味着数据正在返回,但我的浏览器阻止了它。这只发生在公共 API 上。我通过 Azure 创建了自己的 API,设置了 CORS,称为 API,它工作得很好。但是,由于我无权访问公共服务器来设置和启用 CORS,因此我无法知道它们是如何设置的。
这是我调用 API 的代码:
MyAngularApp.service('APIService', function ($http) {
return {
getWork: function() {
return $.ajax({
url: "http://api.nfldata.apiphany.com/nfl/v2/JSON/Teams/2014",
beforeSend: function (xhrObj) {
// Request headers
xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key", "*******");
},
type: "GET",
})
.done(function (data) {
alert("success");
})
.fail(function () {
alert("error");
});
}
}
});
感谢任何帮助
【问题讨论】:
-
是的,这是一个 CORS 问题,您可以使用 JSONP 解决它。通过直接调用 API,您不会遇到 CORS 问题,因为您不是跨域调用它,即您的网站
x.com正在尝试调用p.com,跨站点....只需输入p.com进入浏览器使其成为直接调用。 -
@ppumkin 我试过 jsonp 但我对 jsonp 的回调方面感到困惑。它从不运行回调函数,它只是告诉我意外的符号 :,谢谢,我会进一步研究它
-
是的,JSONP 有点痛苦。使用
fiddler查看响应中返回的数据。我怀疑您在 JS 中的语法不正确。在解析 toJSON 或其他内容之前,您可能忘记将响应括在'string'引号中。这是意外符号错误的常见问题。或者你可能不需要解析响应,因为它已经是 JSON 对象,你可以将它分配给一个内部变量。 -
感谢刚刚下载的提琴手希望这能给我一些答案
标签: javascript api cors asp.net-web-api