使用 JQuery getJSON 方法
Posted
技术标签:
【中文标题】使用 JQuery getJSON 方法【英文标题】:Using JQuery getJSON method 【发布时间】:2011-02-05 22:33:46 【问题描述】:我正在尝试使用 JQuery getJSON 函数来粘贴 JSON 数据。 REST 查询是:
http://query.yahooapis.com/v1/public/yql?q=select%20woeid%20from%20geo.places%20where%20text%20%3D%20%22london%22&format=json&jsoncallback=?
我用来解析“数据”以获取 WOEID 值的脚本在下面似乎不起作用:
$.getJSON("http://query.yahooapis.com/v1/public/yql?"+
"q=select%20woeid%20from%20geo.places%20where%20text%20%3D%20%22"+
"london"+
"%22&format=json&jsoncallback=?",
function(data)
console.log("json: " + data);
var datatmp = data;
if(data.results[0])
var data = filterData(data.results.place[0]);
);
谁能说我做错了什么? link text
【问题讨论】:
【参考方案1】:您的代码需要一些调整,这里是更新版本:
$.getJSON("http://query.yahooapis.com/v1/public/yql?"+
"q=select%20woeid%20from%20geo.places%20where%20text%20%3D%20%22"+
"london"+
"%22&format=json&jsoncallback=json",
function(data)
if(data.query.results)
$.each(data.query.results.place, function(i, v)
console.log("woeid #" + i + ": " + v["woeid"]);
);
);
results
对象在query
之下,所以你需要先进入那里,上面的代码会遍历返回的第一个位置的 woeid 并提醒它们...这只是一个初学者,不确定你是什么最终想用woeid
做,但希望这能让你开始。 You can see the above code working here.
【讨论】:
那么我该如何与那个答案竞争呢? 非常感谢尼克。感谢您对此提供的帮助。 嗨,尼克,感谢您提供的代码,除了某些仅返回一个 woeid 的情况外,它运行良好..?? jsfiddle.net/g7N4U 非常感谢, @nav - 奇怪的是他们在这种情况下改变了他们的结构,无论如何检查单一的情况,像这样:jsfiddle.net/g7N4U/1 感谢 Nick 提供的单一案例 :) 奇怪的是,当只返回一个结果时,json 响应如何改变其结构!【参考方案2】:在这一行:
if(data.results[0])
var data = filterData(data.results.place[0]);
您检查results[0]
是否存在,但您不使用它。我怀疑你的问题可以通过改变这个来解决:
if(data.results[0])
var data = filterData(data.results[0].place[0]);
【讨论】:
【参考方案3】:你有两个关键错误:
-
在YQL URL中指定回调的正确参数是
callback
而不是jsoncallback
结果在data.query.results…
而不是data.results…
另外值得注意的是,YQL 结果返回了一个data.query.count
值,因此您可以查看返回了多少结果。
【讨论】:
jsoncallback
是告诉jQuery你正在处理jsonp
,这部分是正确的。有关详细信息,请参阅文档:api.jquery.com/jQuery.getJSON
jsoncallback
特定于 Flickr,如该页面上的示例中使用的那样。 YQL 使用callback
。
更正我之前的评论,jQuery 在任何情况下都在寻找callback=
,json 前缀(或任何前缀)是可选的。您可以在此处查看相关的 jQuery 源代码:github.com/jquery/jquery/blob/master/src/ajax.js#L212 正如您在我的回答中看到的(单击示例链接),他的 jsoncallback
有效,因为任何 callback=
都匹配两端:)【参考方案4】:
我有一个问题:即使该 URL (http://query.yahooapis.com/...) 不在您的域中,您能否访问它?这不违反“同源政策”吗?
【讨论】:
jQuery 使用带有回调函数的 JSONP,所以同源策略不是问题。以上是关于使用 JQuery getJSON 方法的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 jQuery 方法 getJSON 跨域将复杂对象传递给 WCF 服务?
使用 jQuery $.getJSON() 从 Vuejs 方法中的本地 json 文件获取数据