【问题标题】:Need help putting several arrays from a JSONP call into one single array需要帮助将 JSONP 调用中的多个数组放入一个数组中
【发布时间】:2016-08-06 11:45:36
【问题描述】:

我正在尝试将 twitch 上某个频道的所有观众(聊天中的人)放入一个数组中。

JSONP 调用有效,但 Twitch API 返回几个数组:

  • 版主
  • 员工
  • 管理员
  • global_mods
  • 观众

我想将这些数组中的所有用户名放入一个数组中(即“peopleinchat”)。

我的做法是先声明数组:

var peopleinchat= [];

然后使用$.merge() 将每个后续数组(组)添加到此数组中。但是我无法让它工作......我得到“TypeError:无法读取未定义的属性'长度'”。你能帮帮我吗?

谢谢!

$.ajax({
  url: "https://tmi.twitch.tv/group/user/batuhanbuyukakkan/chatters",

  // The name of the callback parameter, as specified by the YQL service
  jsonp: "callback",

  // Tell jQuery we're expecting JSONP
  dataType: "jsonp",

  // Work with the response
  success: function( response ) {

    var peopleinchat = [];

    $.each(response, function(index, data){

      $.each(data.chatters, function(index, group){

        $('.viewers').append(index + ': ' + group);
        $('.viewers').append('<br>');
        
        $.merge(peopleinchat, group);

      });

    });
    
    $('.array_result').append(peopleinchat);

  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="viewers"></div>
<br>
<br>
<div class="array_result"></div>

【问题讨论】:

  • 我不明白为什么我会收到这个TypeError: Cannot read property 'length' of undefined。它似乎与将不同的数组放入一个更大的数组无关,但它确实阻止了代码比最后一个每个循环执行得更远:S

标签: jquery arrays json jsonp


【解决方案1】:

差不多了 - 我认为你的主要问题是你没有处理 result 参数的正确形状到你的 success 回调。下面的 sn-p 有效:

$.ajax({
  url: "https://tmi.twitch.tv/group/user/batuhanbuyukakkan/chatters",

  // The name of the callback parameter, as specified by the YQL service
  jsonp: "callback",

  // Tell jQuery we're expecting JSONP
  dataType: "jsonp",

  // Work with the response
  success: function( response ) {
    var peopleinchat = [];

    $.each(response.data.chatters, function(index, data){

        $('.viewers').append(index + ': ' + data);
        $('.viewers').append('<br>');
        
        $.merge(peopleinchat, data);

    });
    
    $('.array_result').append(peopleinchat);

  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="viewers"></div>
<br>
<br>
<div class="array_result"></div>

【讨论】:

  • 谢谢,你是对的。显然我得到了 TypeError,因为我正在循环遍历 data.chatters,但这个变量并不存在于 each() 循环的每次循环中,因为 chatters 只是数据的孩子之一。感谢您的解决方案!这比我刚才想出的要好得多:将整个内容嵌入到 if(data.chatters){ } 中。
  • 后续问题:如何让变量 peopleinchat 在此 ajax 调用之外工作?我尝试将var peopleinchat= []; 移到顶部,但没有这样做。在 ajax 调用期间放入其中的数据在 ajax 调用之外仍然不可用。
  • 编辑:没关系,问题是 AJAX 调用需要更长的时间来执行,所以使用结果的所有内容都必须在成功 {} 部分中。修好了。
猜你喜欢
  • 2013-11-15
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
相关资源
最近更新 更多