xml object returnen

maxOn-line

Grünschnabel
Nabend,

wollt mal wieder ein wenig flashen und sitze jetzt vor dem Problem, dass ich eine Funktion habe, die mir ne xml einlesen soll und das xml objekt dann returnen.. geht das überhaupt oder falscher Ansatz? Die xml Datei wird richtig geladen und kann auch innerhalb der funktion ausgegeben werden..

Hier nen Ausschnitt:
Code:
function readXML() {
    werte_xml = new XML();
    werte_xml.ignoreWhite = true;
    werte_xml.load("exchange.xml");
    werte_xml.onLoad = function(ok) {
    if (ok) {
      	trace(werte_xml); //geht und alles korrekt geladen
		return werte_xml;  // <<-- der tuts wohl net solls aber :)
	 }
   };
}; 

this.onLoad = function (){
	werte= readXML();

   trace(werte.firstChild.childNodes[0]); //geht nicht traced undefind
}

Muss ich "werte" vielleicht auch erst als nen XML Objekt definieren oder sowas?

maxon
 
Zuletzt bearbeitet:
Hi,

nein das geht leider so nicht. Die Frage wird hier des öfteren in dieser oder ähnlicher Form gestellt, wobei übersehen wird, dass das Laden externer Daten asynchron stattfindet. Die Ereignisfunktion "XML.onLoad" wird erst aufgerufen, wenn die Daten komplett geladen sind und damit zu einer Zeit, zu der die Funktion "readXML" längst abgearbeitet und beendet ist - was Du Dir vorstellst ist, dass die Codeverarbeitung so lange anhält, bis alle Daten geladen wurden (wäre dem so, hätten wir haufenweise "eingefrohrene" Flashfilme, wenn ein Server mal nicht gleich antwortet ;)).

Du musst alle weitere Bearbeitung der xml-Daten von der onLoad-Funktion aus anstoßen (z.B. durch Aufruf einer weiteren Funktion).

Gruß
.
 
Schade,

aber klingt logisch was du da sagst. Hatte es dann jetzt auch ersteinmal von dort aus an die nächste Funktion übergeben. Aber fänds gut wenn ich die XML Struktur auch im weiteren Verlauf des Films nutzen kann.. aber Danke für die Aufklärung.

maxon
 
Hi,

Du kannst die Struktur (bzw. das Objekt) ja von onLoad aus weitergeben:
Code:
xml.onLoad = function() {
    weiterbearbeiten(this);
}

function weiterbearbeiten(obj) {
    // in "obj" hast Du das komplette XML-Objekt!
}

Wenn Du meinst, Du möchtest die Daten in Code verwenden, der "einfach so" auf der Zeitleiste steht, muss ich Dich leider enttäuschen (kann ja garnicht, weil eben nicht gewartet wird). Eine "ereignisorientierte" Herangehensweise an derartige Anwendungen beinhaltet aber noch weitere Vorteile gegenüber einer sequentiellen und ist in den meisten Fällen zu empfehlen.

Gruß
.
 
Lol, frag mich nicht warum ich das nicht versuht habe.. war der meinung ich muesst die Werte erst in nen Array speichern :-D.

Nochmals THX.

maxon
 
Zurück