我正在尝试使用jQuery.getJSON
使用以下代码从网站获取信息。
<script>
var url = "https://www.gov.uk/api/foreign-travel-advice/usa.json";
alert(url);
$.getJSON(url + "?callback=?",null, function (json) {
alert(json);
alert(json.details.description);
})
</script>
这会在IE中返回错误: 网页错误详情
用户代理:Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 6.1; WOW64; 三叉戟/ 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)时间戳:2013年5月9日星期四16:51:48 UTC
Message: Expected ';'
Line: 1
Char: 18
Code: 0
URI: https://www.gov.uk/api/foreign-travel-advice/usa.json?callback=jQuery1910011146073418833335_1368117826272&_=1368117826273
如果我将usa.json下载为文件,一切正常。
从阅读其他答案,我认为问题是该网站不能正确支持回调。由于我无法控制服务器,有人能告诉我如何解决这个错误吗?
答案 0 :(得分:2)
你混淆了JSON和JSONP,这是两件非常不同的事情。
JSON是一种数据符号。 JSON表示法中的对象可能如下所示:
{"foo": "bar"}
JSONP是JSON的传输机制,它通过在后台使用script
标记和函数调用来处理Same Origin Policy。上面的JSONP可能如下所示:
callback({"foo": "bar"})
通过在您的网址中添加?callback
,您告诉jQuery期望JSONP,而不是JSON。
如果您正在与之交谈的API不支持JSONP,则不能将JSONP与该API一起使用。您可以使用YQL as a proxy。否则,除非该网站支持CORS(并且快速检查表明它不支持),并且您可以依赖使用CORS-enabled browser的用户,否则您需要通过自己的服务器运行。< / p>
答案 1 :(得分:0)
我相信你在最后一行错过了一个分号。
应该如下所示: 警报(json.details.description); });