Javascript getJSON,回调失败,预期为'';

Javascript getJSON,回调失败,预期为'';,javascript,getjson,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&

我正在尝试使用
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>  
如果我下载usa.json作为一个文件,一切正常


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

您混淆了JSON和JSONP,这是两个截然不同的东西

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

{"foo": "bar"}
callback({"foo": "bar"})
是一种JSON传输机制,通过使用
script
标记和幕后的函数调用,可以绕过。上面的JSONP可能如下所示:

{"foo": "bar"}
callback({"foo": "bar"})
通过将
?callback
放在URL中,您告诉jQuery期望的是JSONP,而不是JSON


如果您正在谈论的API不支持JSONP,那么就不能将JSONP与该API一起使用。你也许可以使用。否则,除非该站点支持(快速检查表明它不支持),并且您可以依靠您的用户使用,否则您需要通过自己的服务器运行此操作。

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

应该是这样的: 警报(json.details.description);
});

你不能用JavaScript来回避错误/问题。您必须使用本地代理。非常感谢您推荐YQL。经过一点混乱之后,我现在从网站上得到了有效的JSON。@TImJoyce:(如果是这样,你可以通过点击旁边的复选标记来“接受”答案,详细信息:但前提是这回答了问题——有时你会看到人们几乎恐吓提问者接受答案,而我并不在乎。)