我正在尝试通过 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: Unexpected token :”。
当我查看控制台时,我看到了数据,但它一直显示“意外的标记:”,所以我看不到数据
现在,当我单击并导航到该网址时,我可以查看数据(即 runescape 网址)
我做错了什么?
最佳答案
"Uncaught SyntaxError: Unexpected token :".
听起来第三方API不支持JSONP ,因为当您尝试将 JSON 视为 JSONP 时,就会出现错误。请记住,JSONP 要求两端合作。
查看相关 API 的文档,它可能不支持 JSONP,可能通过不同的端点支持它,可能需要一个参数告诉它您需要 JSONP(尽管通常它们只是查找 callback
jQuery会自动添加的请求参数)等
为了完整起见:服务器端需要知道发生了什么的原因是它需要发回不同的响应。下面是一个 JSON 响应示例:
{"someProperty":"someValue"}
这是它的 JSONP 版本:
someFunctionName({"someProperty":"someValue"})
...其中 someFunctionName
由调用者通过请求参数定义。服务器必须查找参数并在生成响应时使用它。这是因为严格来说,JSONP 不是 ajax,这就是为什么它不受通常规则 ajax 调用的 SOP 的约束。
关于javascript - 回调参数搞乱了ajax调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33709889/