我正在尝试使用jQuery $.getJSON()
从Google检索汇率。使用请求:"http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD"
返回一个简单的JSON文件:
{
lhs: "1 U.S. 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);
});
});
</script>
Fire bug显示正确的JSON文件,但表示使用了无效的标签。
答案 0 :(得分:7)
Google返回纯JSON,但不支持JSONP(= JSON包含在回调中)。
JSONP看起来像:
callbackFunction({json_object: "some_data"})
浏览器可以从其他域加载JSONP-Data,例如它可以在其他域的脚本标记中加载JavaScript。纯JSON数据无法作为JavaScript执行,这就是为什么它无法从其他域的脚本标记中加载。
在这种特殊情况下,Google可以使用简单的AJAX(因为它是同一个域)在iGoogle上获取JSON,但您无法从浏览器内部从您的域中请求它。但是,您可以在服务器上查询它,在那里使用结果并将其发送到客户端(您的服务器充当代理)。
答案 1 :(得分:2)
除了跨域问题,您收到的数据也不是有效的JSON。 The keys need to be quoted。我认为这就是Firebug告诉你使用无效标签的原因。
// this fails
jQuery.parseJSON('{lhs: "1 U.S. dollar", rhs: "1.03800015 Canadian dollars", error: "", icc: true}'));
// this works
jQuery.parseJSON('{"lhs": "1 U.S. dollar", "rhs": "1.03800015 Canadian dollars", "error": "", "icc": true}'));
答案 2 :(得分:1)
我认为Google计算器不支持JSONP(这是跨域javascript所必需的)。特别是你的&jsoncallback=?
没有做任何事情。
您需要在服务器上use a proxy。