jQuery.getJSON(url,[data],[callback])

时间:2009-10-18 20:54:14

标签: jquery getjson

我正在尝试使用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文件,但表示使用了无效的标签。

3 个答案:

答案 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