2016-11-25 7 views
0

Ich ziehe Bilder von Instagram mit json und jQuery.Looping durch JSON mit mehreren Arrays

Die JSON-Daten enthalten Objekte und Arrays. Irgendwie kann ich das zweite Array auf dem Weg zu den Werten, die ich brauche, nicht durchgehen.

Dies ist mein Code:

var request = "./myapi.php?user=jamieoliver"; //&callback=myFunction 
$.ajax({ 
    cache: false, 
    dataType: "json", // or "jsonp" if we enabled it 
    url: request, 
    success: function(response) { 
    console.log(response); 
    for (var i = 0; i < response.entry_data.ProfilePage.length; i++) { 
     console.log(response.entry_data.ProfilePage[i].user.media.nodes[i].thumbnail_src); 
    } 
    }, 
    error: function(xhr, status, error) {} 
}); 

Das Problem seens hier zu sein: nodes[i] - Knoten [] ist ein Array - und mein Code nicht durchschleift es - es gibt mir nur den Wert innerhalb der erstes Objekt innerhalb von Knoten []. Wie durchlaufe ich Knoten [], um den Wert thumbnail_src in jedem seiner Objekte zu erhalten?

Ich habe keine Live-Daten, aber hier ist ein Screenshot von der Struktur der json Antwort: enter image description here

+2

Bitte immer post * code * nicht Bilder, wenn Sie können. – Jim

+0

Ich würde eher sagen, die bessere Option ist die Verwendung einer erweiterten oder einer for-Schleife für das Objekt. –

Antwort

4

Etwas wie folgt aus:

var request = "./myapi.php?user=jamieoliver"; //&callback=myFunction 
$.ajax({ 
    cache: false, 
    dataType: "json", // or "jsonp" if we enabled it 
    url: request, 
    success: function(response) { 
    console.log(response); 
    for (var i = 0; i < response.entry_data.ProfilePage.length; i++) { 
     for (var j = 0; j < response.entry_data.ProfilePage[i].user.media.nodes.length; j++) { 
      console.log(response.entry_data.ProfilePage[i].user.media.nodes[j].thumbnail_src); 
     } 
    } 
    }, 
    error: function(xhr, status, error) {} 
}); 
+0

Mann, es funktioniert. Vielen Dank. :-) – Meek

1

Sie sollten wieder Schleife unter Verwendung eines anderen for:

var request = "./myapi.php?user=jamieoliver"; //&callback=myFunction 
$.ajax({ 
    cache: false, 
    dataType: "json", // or "jsonp" if we enabled it 
    url: request, 
    success: function(response) { 
    console.log(response); 
    var nodes; 
    for (var i = 0; i < response.entry_data.ProfilePage.length; i++) { 
     nodes = response.entry_data.ProfilePage[i].user.media.nodes; 

     for (var n = 0; n < nodes.length; n++) { 
     console.log(nodes[n].thumbnail_src); 
     } 
    } 
    }, 
    error: function(xhr, status, error) {} 
}); 
+0

Verdammt, ich brauchte zu lange um zu antworten. Nun, ich schlage eine sauberere Art vor, das 2. 'für' mit' var nodes' zu durchlaufen, damit Sie es schneller lesen und verstehen können. – xWaZzo

+0

Dieser ist auch nützlich. Aber ist es nicht möglich, eine Art von Funktion zu erstellen, die jedes Array, auf das es trifft, automatisch wiederholt? Ich meine, damit wir nicht mehrere for-Schleifen verwenden müssen? – Meek

+0

@Meek Das ist eine gute Frage. Ich habe das in PHP gemacht, aber es muss etwas Ähnliches in Javascript sein. Sie müssen eine Funktion erstellen, die jedes gefundene Array/Objekt in Schleifen umwandelt und dann die Funktion in sich selbst ausführt, wenn sie ein anderes Array/Objekt findet. Ich kann jedoch nicht denken, wie wir das verwenden könnten, da Sie in Ihrem Beispiel nach einem bestimmten Objekt 'entry_data.ProfilePage [i] .user.media.nodes' gesucht haben. – xWaZzo

Verwandte Themen