2013-05-09 81 views
0

我正在尝试使用jQuery.getJSON通过以下代码从站点获取信息。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日十六时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

你不能绕过JavaScript的错误/问题。你将不得不使用本地代理。 – epascarello 2013-05-09 17:04:51

回答

2

令人困惑的是JSON和JSONP,这两个截然不同的东西。

JSON是数据符号。在JSON符号的对象可能是这样的:

{"foo": "bar"} 

JSONP是JSON一种传输机制,通过使用script标签和幕后函数调用Same Origin Policy各地工作。该JSONP对于上述可能是这样的:

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

通过将?callback在您的网址,你告诉jQuery的期望JSONP,JSON不是。

如果您正在与之交谈的API不支持JSONP,那么您无法在该API中使用JSONP。您可能可以使用YQL as a proxy。否则,除非该网站支持CORS(并且快速检查表明它不支持),并且您可以依靠用户使用CORS-enabled browser,否则您需要通过自己的服务器运行此操作。

+0

非常感谢您建议YQL。经过一些搞砸之后,我现在正在从网站获取有效的JSON。 – 2013-05-13 16:29:18

+0

@TImJoyce:嘿,很酷!很高兴这有帮助。 – 2013-05-13 18:24:32

+0

@TImJoyce:(如果它这样做,顺便SO工作,您可以通过单击旁边的复选标记“接受”的答案,细节:http://meta.stackexchange.com/questions/5234/how-does-accepting-一个答案的工作但只有当这回答了这个问题 - 有时你会看到人们几乎欺负提问者接受答案,我不在乎。) – 2013-05-13 18:24:58

0

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

它应该看起来像这样: alert(json.details.description); });