Drücken, um ein Array innerhalb einer jQuery each-Schleife
Ich bin mit jQuery Parsen einer XML-Datei, und ich bin versucht, jedes element in der XML-Datei in ein array mit jQuery .each-Schleife. Seltsam, wenn ich das alert den Wert des Arrays innerhalb der Schleife, es kommt heraus, wie es sollte, aber wenn ich versuche zu warnen, einen Wert in das array nach der Schleife beendet hat, ergibt "undefiniert".
Ist es etwas seltsam, dass passiert, wenn Sie drücken Sie die Werte in ein array in dieser Art von Schleife?
Hier ist das Javascript:
var splashArray = new Array();
//Load the Splash XML file and assign each image within to an array
$.get('splash.xml', function(xml) {
$('image', xml).each(function (i) {
splashArray.push($(this).attr("src"));
});
});
alert(splashArray[1]); //Results in undefined
Hier ist die XML:
<?xml version="1.0" encoding="UTF-8"?>
<site>
<image src="splash1.jpg" />
<image src="splash2.jpg" />
<image src="splash3.jpg" />
<image src="splash4.jpg" />
<image src="splash5.jpg" />
<image src="splash6.png" />
</site>
InformationsquelleAutor cmal | 2009-09-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Richtige Variante:
In Ihrer Variante des Codes alert(splashArray[1]); wird ausgeführt, bevor ajax-get-xml-Ergebnis, daher splashArray war Sie leer, wenn Sie versuchen zu warnen element mit index 1. Dein code funktioniert gut, nur für den synchronen Modus schaltet, wenn Faden wartet auf server-Antwort. Im Asynchronen Modus sollten Sie verwenden callback-Funktion.
Variante mit callback:
Oder mehrere Muster (pseudocode):
Für mich ist es warnt splash2.jpg
Ja, der code wird richtig abrufen eines array innerhalb des $.Holen Sie sich blockieren, aber warum kann ich ihn nicht abrufen, außerhalb des $.Holen Sie sich block. Vielleicht war ich nicht klar. Mein problem ist nicht immer die alert() zu arbeiten, ist es, die array-Werte abrufbar, für später-code.
weil es eine callback-Funktion, und da Ajax asynchron ist, den Alarm in Ihr code versucht zu warnen, bevor es definiert wird, bevor die callback-Funktion ausgelöst wird.
sollten Sie das callback benutzen.
InformationsquelleAutor Anatoliy
Werden Sie Warnmeldungen, bevor das array wird gefüllt. Sie müssen verstehen, dass XHR/Ajax asynchron ist ( im Gegensatz zu synchron), so wird die Warnung nicht immer ausgeführt, nachdem die callback-Funktion, da dauert es ein paar Sekunden, um die tatsächliche HTTP-Anfrage zu greifen, die xml, die Alarmierung innerhalb der callback sorgt dafür, dass es aufgefüllt wird, nachdem das XHR-Zeug ist fertig.
Funktioniert:
Nicht funktioniert:
Das fast funktioniert, aber man kann immer noch nicht nennen splashArray außerhalb der .ajax-Funktion, die Ergebnisse undefiniert.
Ich dachte, Sie waren "arbeiten an einer Lösung" ? Und ich habe nicht Alarm es außerhalb der Rückruf, alarmierte ich es in dem Rückruf, also es funktioniert und ich haben es getestet.
Ich habe versucht, arbeiten die Lösung, aber immer wieder zu dem gleichen Schluss - die Frage Fragesteller explizit nennen wollte, die Warnung außerhalb der Rückruf.
Ich bekomme es. Der folgende code führt sofort zu, bevor das XML vollständig geladen und analysiert. Macht vollkommen Sinn.
InformationsquelleAutor meder omuraliev
Wenn Sie nicht möchten, zu verwenden eine standard-callback, die andere option ist, um die trigger-ein jQuery-event.
InformationsquelleAutor mikhaelrasputin