jQuery.getJSON( url, [数据], [回调] )

发布于 2024-08-07 16:30:26 字数 639 浏览 10 评论 0原文

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

I am trying to retrieve the exchange rate from Google with jQuery's $.getJSON(). Using the request: "http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD"

returns a simple JSON file:

{
  lhs: "1 U.S. dollar",
  rhs: "1.03800015 Canadian dollars",
  error: "",
  icc: true
}

I am using the following jQuery function to get the Canadian dollar amount:

$(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 displays the correct JSON file but indicates that an invalid label is used.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仙女 2024-08-14 16:30:26

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

JSONP 看起来像:

callbackFunction({json_object: "some_data"})

浏览器可以从其他域加载 JSONP 数据,就像可以从其他域加载脚本标签中的 JavaScript 一样。纯 JSON 数据无法作为 JavaScript 执行,这就是它无法从其他域加载到脚本标签内的原因。

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

Google returns pure JSON and does not support JSONP (=JSON wrapped in a callback).

JSONP looks like:

callbackFunction({json_object: "some_data"})

The browser can load JSONP-Data from other domains like it can load JavaScript in script-tags from other domains. Pure JSON data cannot be executed as JavaScript and that's why it cannot be loaded inside script-tags from other domains.

In this specific case Google can get the JSON on iGoogle by using simple AJAX (because it's the same domain), but you cannot request it from your domain from inside the browser. You can, however, query it on your server, work with the result there and send it to the client (your server acting as a proxy).

夜空下最亮的亮点 2024-08-14 16:30:26

除了跨域问题之外,您收到的数据不是有效的 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}'));

In addition to the cross-domain problem, the data you received is not valid JSON. The keys need to be quoted. I think that's why Firebug tells you invalid labels are used.

// 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}'));
想念有你 2024-08-14 16:30:26

我认为 Google 计算器不支持 JSONP (这是跨平台所必需的)域 JavaScript)。特别是你的 &jsoncallback=? 没有做任何事情。

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

I don't think Google calculator supports JSONP (which is required for cross-domain javascript). Especially your &jsoncallback=? doesn't do anything.

You need to use a proxy on your server.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文