2016-04-14 8 views
0

Ich versuche, alle Zuschauer (Leute im Chat) von einem bestimmten Kanal auf twitch, in ein Array zu bekommen.Benötigen Sie Hilfe setzen mehrere Arrays von einem JSONP Anruf in ein einziges Array

Der JSONP Anruf funktioniert, aber die Twitch API gibt mehrere Arrays:

  • Moderatoren
  • Mitarbeiter
  • admins
  • global_mods
  • Zuschauer

ich setzen will alle Benutzernamen, die in diesen Arrays sind, in ein einziges ar Strahl (d.h. "peopleinchat").

Mein Ansatz war, zuerst das Array zu deklarieren:

var peopleinchat= [];

Und dann jede nachfolgende Array hinzufügen (Gruppe) von Menschen auf dieses Array mit $.merge(). Ich kann es aber nicht zum Funktionieren bringen ... Ich bekomme "TypeError: Kann die Eigenschaft 'length' von undefined nicht lesen". Kannst du mir helfen?

Danke!

$.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>

+0

Ich verstehe nicht, warum ich diese 'Typeerror bin immer: Kann nicht Eigenschaft‚Länge‘von undefined' lesen. Es scheint nicht damit zu tun zu haben, die verschiedenen Arrays in ein größeres Array zu setzen, aber es verhindert, dass der Code weiter ausgeführt wird als die letzte Schleife: S –

Antwort

1

fast - ich glaube, Ihr Hauptproblem war, dass man nicht mit der richtigen Form des result Parameters auf Ihren success Rückruf beschäftigen hat. Das Snippet unten Werke:

$.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>

+0

Danke, Sie haben Recht. Anscheinend bekam ich den TypeError, weil ich data.chatter durchlaufen habe, aber diese Variable existierte nicht jedesmal in jeder() Schleife, weil Chatter nur eines der Kinder der Daten war. Danke für deine Lösung! Es ist viel besser als das, was ich gerade herausgefunden habe: Das Ganze in ein 'if (data.chatters) {}' einbetten. –

+0

Folgefrage: Wie bekomme ich die Variable 'peopleinchat' um außerhalb dieses Ajax Calls zu arbeiten? Ich habe versucht, die 'var peopleinchat = [];' nach oben zu verschieben, aber das tut es nicht. Die Daten, die während des Ajax-Anrufs eingegeben wurden, sind außerhalb des Ajax-Anrufs immer noch nicht verfügbar. –

+0

BEARBEITEN: Es macht nichts, das Problem war, dass der AJAX-Aufruf länger dauert, also musste alles, was das Ergebnis verwendet, im Abschnitt {} erfolgreich sein. Behoben. –

Verwandte Themen