2016-05-08 5 views
1

Ich ziehe Daten aus einer JSON-Datei:JavaScript/jQuery JSON Array Ausgabe - Werte als undefiniert

[ 
{ 
    "video": "video/preroll" 
}, 
{ 
    "video": "video/areyoupopular" 
}, 
{ 
    "video": "video/destinationearth" 
}] 

ich eine console.log in verschiedenen Stadien versucht haben und haben kein Problem, bis ich Geh auf die Bühne unten. Ich brauche die Werte für jedes Video in der JSON-Zeichenfolge und lege sie in ein Array namens Playlist. Der Code Ich verwende ist:

$(function() { 
    var playlist = []; 

    var url = "http://localhost/class_files2/week7.1/video-data.json"; 

    $.get(url, function(data) { 
     // console.log(data); at this point returns the JSON string as expected. 
     for (var i=0; i<data.length; i++) { 
      playlist.push(data[i].video); 
     } 
     console.log(playlist); 
    }); 
}); 

Das Array zeigt, aber mit mehreren undefinierten Werten (siehe Screenshot). array error

Ich sollte die Videowerte in die Wiedergabeliste Array bekommen. Ich habe Hilfe von jemand anderem bekommen, der die Werte mit meinen gleichen Dateien wie erwartet in das Playlist-Array verschoben hat.

Wenn ich die console.log vor dem Push in das Array setzen, bekomme ich die JSON-Zeichenfolge, aber es ist 156 Mal durchlaufen (siehe Screenshot). array 156

Ich habe versucht, neue Dateien zu erstellen und neu zu tippen (nicht kopieren und einfügen). Ich habe versucht, die vollständige AJAX GET-Methode zu verwenden. Ich bin sicher, es ist etwas mit meiner Aussage, aber alles scheint richtig. Ich hatte Hilfe mit jemand anderem gesucht, aber sie bekommen das Array wie erwartet (zweiter Screenshot) ohne ein Problem. Ich verwende XAMPP für OS X 1.8.3-4 MacBook Pro (Retina, 13-Zoll, Ende 2013) OSX El Capitan 10.11.4 Der gleiche Fehler tritt in Chrome, Firefox und Safari.

Was könnte möglicherweise das Problem sein? Es ist besonders merkwürdig, da die gleichen Dateien auf einem anderen Computer zu funktionieren scheinen, es sei denn, es gibt eine andere Variable, die nicht berücksichtigt wird.

+0

Ihr Code sieht gut aus. vielleicht ist Ihre Datendatei beschädigt –

+0

können Sie mir die Art von 'Daten' sagen. Eine Zeile vor ''console.log (typeof (data)) hinzugefügt;', bezweifle ich, dass es sich um eine JSON-Zeichenkette handelt. –

+0

Versuchen Sie, die Deklaration 'var playlist = [];' in die asynchrone 'get'-Funktion einzufügen und zurückzukehren es als Ergebnis. Sie führen eine asynchrone Funktion in einer synchronen Funktion aus, in der die Wiedergabeliste definiert wurde. – Redu

Antwort

1

Vermeiden Sie die Verwendung von for-Schleife mit Liste/Arrays. Verwenden Sie forEach Schleife.

Versuchen Sie dies.

$.get(url, function(data) { 
    // console.log(data); at this point returns the JSON string as expected. 
    data = JSON.parse(data); 
    data.forEach(function(item) { 
     playlist.push(item.video); 
    }); 
    console.log(playlist); 
}); 
+0

Ich mag dies als eine Option, aber bekomme einen Fehler von TypeError: data.forEach ist keine Funktion keine Idee Warum sollte das sein? – user5745356

+0

dann ist es sicher, dass Daten kein Array ist, es ist eine JSON-Zeichenfolge. Sie müssen es zuerst analysieren. Ich aktualisiere meine Antwort. –

+1

[$ .get()] (https://api.jquery.com/jquery.get/) verfügt auch über ein weiteres Argument, in dem Sie den Datentyp angeben können, den Sie erwarten. – Mikey