5

我正在尝试使用 jQuery 从 Google 检索汇率$.getJSON()。使用请求:"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>

火灾错误显示正确的 JSON 文件,但表明使用了无效标签。

4

3 回答 3

7

Google 返回纯 JSON,不支持 JSONP(=JSON 封装在回调中)。

JSONP 看起来像:

callbackFunction({json_object: "some_data"})

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

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

于 2009-10-18T21:08:08.943 回答
2

除了跨域问题,你收到的数据不是有效的JSON。键需要被引用。我认为这就是 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}'));
于 2010-12-26T04:10:49.463 回答
1

我不认为谷歌计算器支持JSONP(这是跨域 javascript 所必需的)。尤其是你&jsoncallback=?什么都不做。

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

于 2009-10-18T21:11:45.300 回答