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

问题描述 投票:5回答:3

我试图用jQuery qazxsw poi从谷歌检索汇率。使用请求:qazxsw poi

返回一个简单的JSON文件:

$.getJSON()

我使用以下jQuery函数来获取加元金额:

"http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD"

Fire bug显示正确的JSON文件,但表示使用了无效的标签。

jquery getjson
3个回答
7
投票

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,但您无法从浏览器内部从您的域中请求它。但是,您可以在服务器上查询它,在那里使用结果并将其发送到客户端(您的服务器充当代理)。


2
投票

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

1
投票

我不认为谷歌计算器支持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

© www.soinside.com 2019 - 2024. All rights reserved.