【问题标题】:Getting this error when requesting data from API从 API 请求数据时出现此错误
【发布时间】:2017-02-14 09:44:19
【问题描述】:

我一直在搞乱从 API 中提取数据,但由于某种原因,它给了我这个错误,我不知道如何解决这个问题:

跨域请求被阻止:同源策略不允许读取位于https://battlefieldtracker.com/bf1/api/Stats/DetailedStats?platform=2&personaId=376461834&displayName=TR_ISMAIL_TR&game=tunguska 的远程资源。 (原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。

所以我从http://docs.trnbattlefield.apiary.io/#introduction/parameters/platform 生成了这个网址,我可以在该网站上看到我在《战地 1》中的游戏内统计信息,但是当我将网址复制粘贴到网络时,它给了我一个错误的请求。

那么有人知道如何解决这个问题吗?

【问题讨论】:

  • 我们需要更多信息,您使用什么来调用 API? HTTPRequest、AJAX?
  • 当您发出跨域请求时,您会被同源策略阻止,因为接收域在响应中不包含 CORS 标头。在 JS 中没有解决方法。您将需要改为请求服务器端
  • @CuriousDev 它是第三方 API

标签: javascript jquery json api


【解决方案1】:

如果您使用 AJAX,请尝试将数据类型设置为 JSONP

$.ajax({
 url:"END POINT",
 dataType: 'jsonp', // Notice! JSONP <-- P (lowercase)
 success:function(json){       
     alert("Success");
 },
 error:function(){
     alert("Error");
 }      
});

【讨论】:

  • 这仅适用于 API 发送 JSONP 响应(不能直接与 JSON 互换)。这不是自动修复。
  • 我假设它可以,但你的权利,如果它没有,它就不会起作用。
  • 暂时无法修复,我看看我能做些什么。感谢您的帮助
【解决方案2】:

如果服务器不允许,您不能发出跨域 AJAX 请求(有时可以使用“预飞行”请求,详细说明 here)。

如果您可以控制自己的网络服务器,您可以做的事情制作反向代理,以便使用本地 URL 访问远程数据。 p>

这是使用 Apache 的方法(需要启用 mod_proxy):

< VirtualHost *:80 >
    ServerName www.yourserver.com
    ProxyPreserveHost On
    ProxyRequests On
    ProxyPass /bfapi/ https://battlefieldtracker.com/bf1/api/
    ProxyPassReverse /bfapi/ https://battlefieldtracker.com/bf1/api/
< /VirtualHost >

如果您使用 Nginx,请将其放在配置文件的服务器部分:

location /bfapi/ {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass https://battlefieldtracker.com/bf1/api/;
}

这样您就可以使用以下 URL 调用 API:https://yourserver.com/bfapi/Stats/DetailedStats?platform=2&personaId=376461834&displayName=TR_ISMAIL_TR&game=tunguska

当然,您必须将 yourserver.com 替换为您自己的域。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 2021-03-22
    • 2016-07-19
    • 2023-03-04
    • 2015-06-13
    • 2021-09-07
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多