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