【问题标题】:jQuery $.getJSON throws Unexpected TokenjQuery $.getJSON 抛出意外的令牌
【发布时间】:2015-06-09 18:01:42
【问题描述】:

我是一名 JavaScript 初学者。我想使用以下 URL 从 Steam 市场检索一些数据:

https://steamcommunity.com/market/priceoverview/?country=PL&currency=3&appid=730&callback=?&market_hash_name=Operation%20Vanguard%20Weapon%20Case#

我在浏览器中收到此响应:

{"success":true,"lowest_price":"0,09\u20ac","volume":"1,017","median_price":"0,10\u20ac"}

但我无法让它在 JS 中工作。

var amount = prompt("How many cases do you have?\t");
$.getJSON("http://steamcommunity.com/market/priceoverview/?country=PL&currency=3&appid=730&callback=?&market_hash_name=Operation%20Vanguard%20Weapon%20Case#",
    function(json) {
    var raw_price = json.lowest_price;
    var price = raw_price.split('&')[0];
    var price_total = price*parseInt(amount);
    alert(price_total + '€');
});

它只是把我扔了:

Uncaught SyntaxError: Unexpected token :

这段代码有什么问题?

【问题讨论】:

    标签: javascript json steam-web-api


    【解决方案1】:

    这是你的问题。我跑了

    $.ajax( "https://steamcommunity.com/market/priceoverview/?country=PL&currency=3&appid=730&callback=?&market_hash_name=Operation%20Vanguard%20Weapon%20Case" )
      .done(function() {
        alert( "success" );
      })
      .fail(function(jqXHR, textStatus) {
    console.log(jqXHR );
    });
    

    得到这个输出

    XMLHttpRequest cannot load https://steamcommunity.com/market/priceoverview/?country=PL&currency=3&appid=730&callback=?&market_hash_name=Operation%20Vanguard%20Weapon%20Case. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://fiddle.jshell.net' is therefore not allowed access.
    

    这意味着您不能使用 JQuery 执行此操作。尝试使用 Steam 的 Web API:https://developer.valvesoftware.com/wiki/Steam_Web_API

    【讨论】:

    • 我不知道如何使用 Steam 的 Web API。你能给我一个获取商品价格的例子吗?
    • 据我所知,您有两种选择:1) 如果您有域:steamcommunity.com/dev/apikey。 2) 如果您使用的是 Node.js、PHP 等,您可以使用 npmjs.com/package/steam-community 之类的东西。对此没有简单的答案,这有点愚蠢。
    • 没有 Steam API 可以获取市场上商品的价格。 OP 使用的 URL 就可以了。无论他是使用 API 还是上面提到的 URL,他仍然会收到此错误,因为 Steam 不允许从 JavaScript 访问他们的 URL。谷歌“JavaScript 跨域请求”。请参阅我的(有点旧的)答案,了解如何在 Steam 市场上获取商品的价格:stackoverflow.com/a/25665733/2634190
    【解决方案2】:

    这个问题最终被我解决了。问题在于,由于 Access-Control-Allow-Origin,Steam 不允许在浏览器中使用 JavaScript 代码访问他们的市场数据。

    我已将我的 JS 代码重写为 PHP 并发送了相同的请求,但这次来自我自己的 WWW 服务器:

    function get_price() {
        $url = "https://steamcommunity.com/market/priceoverview/?country=PL&currency=3&appid=730&callback=?&market_hash_name=Operation%20Vanguard%20Weapon%20Case";
        $json = file_get_contents($url);
        $price = json_decode($json);
        $price_case = $price->{"lowest_price"};
        return number_format($price_case, 2);
    }
    

    工作就像一个魅力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2012-02-10
      相关资源
      最近更新 更多