jQuery.getJSON(url,,)

对所有人来说

我试图用jQuery的$ .getJSON()从Google检索汇率。 使用请求:“ http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD

返回一个简单的JSON文件: {lhs: "1 US dollar",rhs: "1.03800015 Canadian dollars",error: "",icc: true}

我使用以下jquery函数来获得加元金额:

 $(document).ready(function(){ $.getJSON("http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD?&label=rhs&format=json&jsoncallback=?", function(data){ alert(data); }); });  

Fire bug显示正确的JSON文件,但表明使用了无效的标签。

任何帮助表示赞赏。

短发

Google返回纯JSON并且不支持JSONP(= JSON包含在回调中)。

JSONP看起来像:

 callbackFunction({json_object: "some_data"}) 

浏览器可以从其他域加载JSONP-Data,例如它可以从其他域的脚本标记中加载JavaScript。 纯JSON数据不能作为JavaScript执行,这就是为什么它无法从其他域的脚本标记中加载。

在这种特殊情况下,Google可以使用简单的AJAX(因为它是同一个域)在iGoogle上获取JSON,但您无法从浏览器内部从您的域中请求它。 但是,您可以在服务器上查询它,在那里使用结果并将其发送到客户端(您的服务器充当代理)。

除了跨域问题,您收到的数据也不是有效的JSON。 需要引用密钥 。 我认为这就是Firebug告诉你使用无效标签的原因。

 // this fails jQuery.parseJSON('{lhs: "1 US dollar", rhs: "1.03800015 Canadian dollars", error: "", icc: true}')); // this works jQuery.parseJSON('{"lhs": "1 US dollar", "rhs": "1.03800015 Canadian dollars", "error": "", "icc": true}')); 

我不认为Google计算器支持JSONP (跨域javascript需要)。 特别是你的&jsoncallback=? 没有做任何事。

您需要在服务器上使用代理 。