我试图通过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网址)
我做错了什么?
答案 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的限制。