【问题标题】:JSONP using .getJSON is returning undefined使用 .getJSON 的 JSONP 返回未定义
【发布时间】:2014-05-26 14:27:40
【问题描述】:

我正在尝试 Karl Swedburg 为 Ajax 编写的 Learning jQuery 4th edition 练习,更具体地说是 JSONP。

我的代码是

$(document).ready(function(){
var url='https://api.github.com/users/jquery/repos';
$.getJSON(url + '?callback=?',function(data){
  var content='';
  $.each(data,function(index,item){
    content +='<div class="userdata">';
    content +='<div class="username">'+item.id+'</div>';
    content +='<div class="username">'+item.name+'</div>';
    content +='<div class="userurl">'+item.url+'</div>';
    content +='</div>';
  });
  $('#dictionary').append(content);

});
});

我检查了开发者工具,我的请求返回状态 200

请求返回的数据摘录如下所示

{
  "id": 5999890,
  "name": "2012-dev-summit",
  "full_name": "jquery/2012-dev-summit",
  //more stuff
}

我已经检查并再次检查了我的代码,但似乎无法弄清楚为什么它返回未定义。

编辑:添加了附加内容

undefined
undefined
undefined
undefined
undefined
undefined

我得到 6 个未定义,这相当于 2 次迭代,每轮输出 3 个项目,即。 id、name 和 url。

【问题讨论】:

    标签: javascript jquery ajax jsonp


    【解决方案1】:

    试试这个

    $(document).ready(function(){
    var url='https://api.github.com/users/jquery/repos';
    $.getJSON(url + '?callback',function(data){
      var content='';
      $.each(data,function(index,item){
        content +='<div class="userdata">';
        content +='<div class="username">'+item.id+'</div>';
        content +='<div class="username">'+item.name+'</div>';
        content +='<div class="userurl">'+item.url+'</div>';
        content +='</div>';
      });
      $('#dictionary').append(content);
    
    });
    });
    

    DEMO

    【讨论】:

    • 为什么要改变 ?callback=? to ?callback 使它工作?从文档中,它说字符串必须包含 callback=?让它工作,那么为什么它改变它使它在这种情况下工作?
    【解决方案2】:

    试试下面的。您将在 result.data 对象中获得结果。不在结果对象中。

    $(document).ready(function(){
    var url='https://api.github.com/users/jquery/repos';
    $.getJSON(url + '?callback=?',function(result){
      var content='';
      var data = result.data;
      $.each(data,function(index,item){
        content +='<div class="userdata">';
        content +='<div class="username">'+item.id+'</div>';
        content +='<div class="username">'+item.name+'</div>';
        content +='<div class="userurl">'+item.url+'</div>';
        content +='</div>';
      });
      $('#dictionary').append(content);
    
    });
    

    });

    FIDDLE

    【讨论】:

    • 您的代码有效,但为什么它确实有效?我在 result.data.object 而不是 result.object 中得到结果是什么意思?
    • 您在代码(数据)中直接循环通过 getJSON 回调的结果。但实际数据位于代码中的 data.data 中,在我的代码中 result.data 中。所以你需要遍历 result.data 来访问结果对象。希望对您有所帮助。
    猜你喜欢
    • 2010-11-29
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2019-05-28
    相关资源
    最近更新 更多