一尘不染

跨域jquery ajax(Jsonp):未捕获语法错误:意外令牌:(冒号)

ajax

我一直在尝试从Steam API中提取数据,但没有运气,因为我总是会遇到上述错误。这是我正在使用的代码:

var steamurl = "https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/V001/?key=[keyomitted]&account_id=38440257&Matches_Requested=10";
function populate_api(){
    var json;
        $.ajax({ 
            'url': steamurl,
            'dataType': "jsonp",
            'success': function (data) {
                alert('success');
                json = data;
            }
        });
}

我省略了我的API密钥。我看过许多其他帖子,但无法弄清楚问题出在哪里。我试过使用Jsonp,常规json,也试过使用"&callback=?"after
steamurl,但无济于事。


阅读 276

收藏
2020-07-26

共1个答案

一尘不染

解决方案是添加一个您的jQuery代码将调用的本地代理。您的代理将是服务器端代码(PHP,Python,Ruby等),它将查询转发到Valve,然后将其返回给jQuery调用。但是,您将必须使用其支持的格式之一(JSONP不是其中之一)。

概述您将要做什么:

  • 创建接受参数的jQuery将传递的PHP文件。在这种情况下,它看起来像是帐户ID,并且与您要接收的匹配项相同。不要传递API密钥,该密钥应存储在PHP文件中
  • 在PHP中,steamurl使用存储的API密钥和两个传递的值构建您的
  • 使用此命令向Valve服务器发出呼叫steamurl并检索结果。
  • 将此响应返回给您的ajax调用

您的PHP将看起来像这样(并且应该包括更多错误检查,因为我只是将这些$_GET值当作福音:

$matches = $_GET['matches'];
$acct = $_GET['accountid'];
$APIKEY = <YOURKEYHERE>;

$steamurl = "https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/V001/?key=$APIKEY&account_id=$acct&Matches_Requested=$matches&format=json";
$json_object= file_get_contents($steamurl);
header('Content-Type: application/json');
echo $json_object;

现在,您可以使用jQuery解析此JSON响应。

2020-07-26