【问题标题】:jQuery.getJSON( url, [data], [callback] )jQuery.getJSON(网址,[数据],[回调])
【发布时间】:2010-12-07 20:17:03
【问题描述】:

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

【问题讨论】:

    标签: jquery getjson


    【解决方案1】:

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

    JSONP 看起来像:

    callbackFunction({json_object: "some_data"})
    

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

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

    【讨论】:

    • 很好的答案。能否详细说明一下 JSON 和 JSONP 的区别?
    • Nick,我可以把json文件当作文本自己解析吗?谢谢,鲍勃
    • 嗨 Bob,如果这些文件不是 JavaScript,则您无法在浏览器中访问其他服务器的文件(相同的域策略)。唯一可行的解​​决方案是直接从您的服务器请求它们并将结果发送到浏览器。
    • 尼克,它是 PHP - 只是另一个学习曲线。谢谢你的帮助鲍勃
    【解决方案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}'));
    

    【讨论】:

      【解决方案3】:

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

      你需要在你的服务器上use a proxy

      【讨论】:

      • 谢谢 Marcel,我想我必须开始使用 PHP。鲍勃
      猜你喜欢
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2010-10-09
      • 2012-08-24
      • 2018-11-09
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多