使用 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()跨域大数据量请求方法

是否可以使用 jQuery 方法 getJSON 跨域将复杂对象传递给 WCF 服务?

使用 jQuery $.getJSON() 从 Vuejs 方法中的本地 json 文件获取数据

jQuery.getJSON相关的。。求助啊~~求助~~

jQuery的$.getJSON方法在IE浏览器下失效的解决方案

jQuery之getjson信息展示