【问题标题】:Jquery Ajax jsonp invalid token error for invalid json but it appears correct无效json的Jquery Ajax jsonp无效令牌错误,但看起来正确
【发布时间】:2017-04-18 02:40:17
【问题描述】:

我目前正在尝试在 jquery 中使用 OSRS api。

在此之前,我在 Rails 中使用 httparty,但想看看我是否可以通过 javascript 方式来实现。

但是,尽管它看起来有效,但我似乎在解析响应的内容时遇到了问题。

我的代码如下:

// jquery Stuff
$( document ).ready(function() {
  var url_test = "http://services.runescape.com/m=itemdb_oldschool/api/catalogue/detail.json?item=207&format=json";
  $.ajax({
    crossDomain: true,
    dataType: "jsonp",
    url: url_test ,
    }).done(function ( data ) {
      console.log(data);
      alert( "Load was performed." );
  });

});

这是我从 api 得到的“损坏”响应,它抛出 Uncaught SyntaxError: Unexpected token 的错误:

{"item":{"icon":"http://services.runescape.com/m=itemdb_oldschool/1492081307848_obj_sprite.gif?id=207","icon_large":"http://services.runescape.com/m=itemdb_oldschool/1492081307848_obj_big.gif?id=207","id":207,"type":"Default","typeIcon":"http://www.runescape.com/img/categories/Default","name":"Grimy ranarr weed","description":"It needs cleaning.","current":{"trend":"neutral","price":"7,338"},"today":{"trend":"negative","price":"- 20"},"members":"true","day30":{"trend":"positive","change":"+2.0%"},"day90":{"trend":"positive","change":"+8.0%"},"day180":{"trend":"positive","change":"+8.0%"}}}

有什么方法可以正确加载这些数据。我认为这是因为如果我在哪里猜的话使用 jsonp。但是我似乎无法加载 api throws json 数据类型,因为它会引发 CORS 错误。所以我有点卡住了,任何帮助都会非常感谢!

【问题讨论】:

    标签: javascript jquery json ajax


    【解决方案1】:

    您返回的是JSON,而不是JSONP。您的回复看起来像

    {"name" : "Joe"}   //json format
    

    jQuery 期待这样的事情:

    jQuery42534534636363({"name" : "Joe"})   //jsonp format
    

    如果您确实需要使用JSONP 来绕过同源策略,那么服务器服务需要能够实际返回 JSONP 响应。

    如果同源策略对您的应用程序来说不是问题,那么您只需将jQuery.ajax 调用中的dataType 修复为json 而不是jsonp

    // jquery Stuff
    $( document ).ready(function() {
      var url_test = "http://services.runescape.com/m=itemdb_oldschool/api/catalogue/detail.json?item=207&format=json";
      $.ajax({
        crossDomain: true,
        dataType: "json",
        url: url_test ,
        }).done(function ( data ) {
          console.log(data);
          alert( "Load was performed." );
      });
    
    });
    

    JSONP 示例(一个包装函数)

    JSON Example

    【讨论】:

    • 有什么办法可以解决这个问题,因为我不拥有服务器,它不是我的端点,并且由于某种原因,rails 中的 httparty 似乎可以工作。 (格式搞砸了)但我可以处理字符串操作。任何方式我都可以获得响应而不是自动解析它。
    • 您可以简单地添加一个插件 (allow-cross-origin) 或者您可以尝试来自stackoverflow的教程
    猜你喜欢
    • 2011-11-01
    • 2018-09-25
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多