0

我正在尝试使用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;Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729)时间戳:周四,9 2013 年 5 月 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 作为文件下载,一切正常。

通过阅读其他答案,我认为问题在于该站点不正确支持回调。由于我无法控制服务器,谁能告诉我如何解决这个错误?

4

2 回答 2

2

你混淆了 JSON 和 JSONP,这是两个非常不同的东西。

JSON是一种数据表示法。JSON 表示法中的对象可能如下所示:

{"foo": "bar"}

JSONP是一种 JSON 传输机制,通过在后台使用标签和函数调用围绕同源策略工作。script上面的 JSONP 可能如下所示:

callback({"foo": "bar"})

通过?callback输入您的 URL,您是在告诉 jQuery 期待 JSONP,而不是 JSON。

如果您正在与之交谈的 API 不支持 JSONP,则您不能将 JSONP 与该 API 一起使用。您也许可以使用YQL 作为代理。否则,除非该站点支持CORS(并且快速检查表明它不支持)并且您可以依靠您的用户使用支持 CORS 的浏览器,否则您需要通过您自己的服务器运行它。

于 2013-05-09T17:04:37.113 回答
0

我相信您在最后一行缺少分号。

它应该如下所示: alert(json.details.description); });

于 2013-05-09T18:37:31.050 回答