我正试图从API by suredbits获取免费的NFL数据。不幸的是,在他们的标题中,他们没有添加Access-Control-Allow-Origin
,这会产生CORS问题。当我尝试运行这样的代码时......
$.getJSON("http://api.suredbits.com/nfl/v0/stats/jones/julio", function(playerData) {
alert(playerdata);
}
我一直收到此错误No 'Access-Control-Allow-Origin' header is present on the requested resource.
基本上,他们是否可以通过客户端解决他们的错误?
答案 0 :(得分:4)
实际上有一种方法可以从客户端修复它:将请求网址更改为https://cors-anywhere.herokuapp.com/http://api.suredbits.com/nfl/v0/stats/jones/julio
:
const proxyURL = "https://cors-anywhere.herokuapp.com/";
const requestURL = "http://api.suredbits.com/nfl/v0/stats/jones/julio";
$.getJSON(proxyURL + requestURL, function(playerData) {
console.log(playerData);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
是的,那不是完全从客户端修复它 - 因为它实际上正在做什么,导致请求通过https://cors-anywhere.herokuapp.com/进行,这是一个开放的CORS代理,只是添加Access-Control-Allow-Origin
响应标头,以便浏览器允许您的前端JavaScript代码访问响应。
但正如答案中的代码片段所示,它绝对不需要对托管要从中获取数据的API端点的服务器进行任何更改。相反,它只需要对您自己的前端代码进行微不足道的更改。
当然,在所有情况下依赖这样的公开开放代理并不是正确的解决方案。但至少它是一个很好的解决方案,在这种情况下,API提供商只是没有使用CORS启用他们的API,以便您可以直接向其发送请求并获得可以使用的响应。
如何使用CORS代理来解决 No 'Access-Control-Allow-Origin' header is present on the requested resource—when trying to get data from a REST API 的答案中的“No Access-Control-Allow-Origin标题”问题部分更多细节。