回调参数弄乱了ajax调用?

时间:2015-11-14 15:18:22

标签: javascript jquery ajax

我试图通过ajax调用获取数据:

$.ajax({
    url: "http://services.runescape.com/m=itemdb_rs/api/catalogue/detail.json?item=1048",
    type: "GET",
    dataType: "jsonp",
    success: function(data){
        console.log(data.item.name);

    },
    error: function (err) {
        console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
    }

});

因为它是第三方api,我只是jsonp。问题是:我收到语法错误:" Uncaught SyntaxError:意外的令牌:"。

当我查看控制台时,我看到数据,但它一直说出意外的令牌:,所以我看不到数据

现在当我点击并导航到该网址时,我可以查看数据(所以runescape网址)

我做错了什么?

1 个答案:

答案 0 :(得分:3)

  

“未捕获的SyntaxError:意外的令牌:”。

听起来第三方API不支持JSONP,因为当您尝试将JSON视为JSONP时,这就是错误。请记住,JSONP要求两端合作。

查看相关API的文档,它可能不支持JSONP,可能通过不同的端点支持它,可能需要一个参数告诉它你想要JSONP(尽管通常他们只是寻找callback jQuery将自动添加的请求参数等等。

仅为了完整性:服务器端需要知道发生了什么的原因是它需要发送回不同的响应。以下是JSON响应示例:

{"someProperty":"someValue"}

以下是JSONP版本:

someFunctionName({"someProperty":"someValue"})

...其中someFunctionName调用者通过请求参数定义。服务器必须查找参数并在生成响应时使用它。这是因为JSONP严格来说不是ajax,这就是为什么它不受通常规则ajax调用的SOP的限制。