带有回调失败的getJSON with Expected';'

时间:2013-05-09 17:01:57

标签: javascript getjson

我正在尝试使用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下载为文件,一切正常。

从阅读其他答案,我认为问题是该网站不能正确支持回调。由于我无法控制服务器,有人能告诉我如何解决这个错误吗?

2 个答案:

答案 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); });