Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-11-2010, 10:35   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2010
Beiträge: 18
Arraywertzuweisung außerhalb einer Funktion nicht definiert

Hallo zusammen,

folgender Code ist zum auslesen von Links aus einer XML-Datei.
Mein Problem ist jetzt das innerhalb der For-in Schleife die Werte des Arrays XMLlink_value augelesen werden können.
Außerhalb ist die Länge des Arrays 0 und enthält keine Werte.

Bin für jeden Vorschlag dankbar.

vg


Code:
XMLlink_value = new Array();

XMLlink = new XML();
XMLlink.ignoreWhite = true;
XMLlink.load(filepath + "_xml/navigation.xml");
XMLlink.contentType = "text/xml";

myXML.onLoad = function(success) 
{
  if (success) 
  {
    getLink();
  }
  else
  {
    trace("Fehler beim Laden der XML-Datei");
  }
}


function getLink()
{
  rootNode = XMLlink.firstChild;
         
  for(index in rootNode.childNodes)
  {
    actNode = rootNode.childNodes[index];
    XMLlink_value[index] = actNode.attributes["value"];
    trace(XMLlink_value[index]);      
  }//

}//


trace(XMLlink_value.length);
Ausgabe

0
Link1
Link2
Link3
Link4
Link5
Link6
Link7
derandi80 ist offline   Mit Zitat antworten
Alt 15-11-2010, 11:03   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Zitat:
Zitat von derandi80 Beitrag anzeigen
Außerhalb ist die Länge des Arrays 0 und enthält keine Werte.
Das hat nichts mit der for-Schleife zutun, sondern liegt daran, dass dieser Zugriff erfolgt bevor das XML geladen und verarbeitet wurde.

Du kannst auf diese Daten erst dann zugreifen, wenn die Funktion onLoad ausgeführt wurde. Das erreicht man beispielsweise, wenn man diesen Befehl einfach am Ende der Funktion getLink aufruft!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 15-11-2010, 12:45   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2010
Beiträge: 18
Danke für den Tipp. Hab noch gesehen das die Fkt. falsch bezeichnet ist.

Code:
XMLlink_value = new Array();

XMLlink = new XML();
XMLlink.ignoreWhite = true;
XMLlink.contentType = "text/xml";
XMLlink.load("navigation.xml");


XMLlink.onLoad = function(success) 
{
  if (success) 
  {
  rootNode = XMLlink.firstChild;
         
  	for(index in rootNode.childNodes)
  	{
    	actNode = rootNode.childNodes[index];
    	XMLlink_value[index] = actNode.attributes["value"];
             trace(XMLlink_value[index]);
 	 }//
  }
  else
  {
    trace("Fehler beim Laden der XML-Datei");
  }
}//

trace(XMLlink_value[1]);
Das Problem bleibt aber weiterhin bestehen.
Direkt nach dem Zuweisen der Werte aus der xml-Datei ist es möglich die Werte des Arrays (XMLlink_value) auszulesen.
Nachdem abarbeiten der Fkt. onLoad erzeugt der Aufruf "trace(XMLlink_value[1]);" ein "undefined". Obwohl das Array global im Script definiert ist und ihm auch Werte zugewiesen werden.
derandi80 ist offline   Mit Zitat antworten
Alt 15-11-2010, 12:47   #4 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
DEr trace wird geschossen/ausgeführt, bevor Dein Array werte bekommt!
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 15-11-2010, 13:06   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2010
Beiträge: 18
Gibt es dafür eine plausible Erklärung warum das trace voher verarbeitet wird?
Weil somit kann man ja die Werte der XML nicht außerhalb der Fkt Onload weiterverwenden.
derandi80 ist offline   Mit Zitat antworten
Alt 15-11-2010, 14:00   #6 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
Gibt es dafür eine plausible Erklärung warum das trace voher verarbeitet wird?
XMLlink.onLoad ist eine Callback-Funktion, die wird ausgeführt, sobald ne Antwort vom server da ist.

Zitat:
Weil somit kann man ja die Werte der XML nicht außerhalb der Fkt Onload weiterverwenden.
doch, du musst halt nur warten, bis die Antwort vom Server da ist.
ActionScript:
  1. XMLlink_value = new Array();
  2. XMLlink = new XML();
  3. XMLlink.ignoreWhite = true;
  4. XMLlink.contentType = "text/xml";
  5. XMLlink.onLoad = function(success)
  6. {
  7.     if (success){
  8.         rootNode = XMLlink.firstChild;
  9.  
  10.         for(index in rootNode.childNodes){
  11.             actNode = rootNode.childNodes[index];
  12.             XMLlink_value[index] = actNode.attributes["value"];
  13.             trace(XMLlink_value[index]);
  14.         }
  15.        
  16.         machWas();
  17.     }else{
  18.         trace("Fehler beim Laden der XML-Datei");
  19.     }
  20. }
  21. XMLlink.load("navigation.xml");
  22.  
  23.  
  24.  
  25.  
  26. function machWas()
  27. {
  28.     //jetzt sind die daten da, jetzt kannst du damit arbeiten!
  29.     trace(XMLlink_value[0]);
  30. }
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 15-11-2010, 14:23   #7 (permalink)
Neuer User
 
Registriert seit: Nov 2010
Beiträge: 18
Danke für den Hinweis aber es löst nicht das Problem.

Wenn man eine Funktion aus der Funktion Onload heraus aufruft dann existiert die Funktion nur zur Laufzeit der Funktion Onload. Danach nicht mehr und genau so ist mit den Daten des Arrays. Innerhalb der aufgerufenen Funktion kann ich die Daten verarbeiteten. Außerhalb existieren sie nicht.


Ich habe die Vermutung das die Abarbeitung des Flashmovies eine höherer Priorität hat als das Laden des XML-Files. Dh. die Daten stehen mit Beginn des Flashs noch garnicht zur Verfügung und werden erst am Ende geladen.

Denn objekt.status liefert keine Fehler.

vg
derandi80 ist offline   Mit Zitat antworten
Alt 15-11-2010, 14:35   #8 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
Ich habe die Vermutung das die Abarbeitung des Flashmovies eine höherer Priorität hat als das Laden des XML-Files. Dh. die Daten stehen mit Beginn des Flashs noch garnicht zur Verfügung und werden erst am Ende geladen.
Priorität nein, die beiden Vorgänge konkurrieren nicht.
Flash wartet schlicht nicht mit der Abarbeitung, bis die Antwort vom Server da ist. Es schickt die Anfrage an den Server, sagt dem Postboten quasi: "Wenn Post kommt, bitte hier Klopfen" und macht weiter mit dem restlichen Code, bis der Postbote halt klopft.
Und wenn er nicht klopft ist halt nichts angekommen.

Zitat:
Danke für den Hinweis aber es löst nicht das Problem.
dann ist das Problem, das Problem; denn die Lösung ist korrekt (und die einzig vernünftige Variante)

Zitat:
Wenn man eine Funktion aus der Funktion Onload heraus aufruft dann existiert die Funktion nur zur Laufzeit der Funktion Onload. Danach nicht mehr und genau so ist mit den Daten des Arrays. Innerhalb der aufgerufenen Funktion kann ich die Daten verarbeiteten. Außerhalb existieren sie nicht.
das ist schlicht falsch. Dia Variable (wie auch eine Funktion) existiert in dem Scope, wo sie definiert wurde (bei dir global)
und nur weil sie (noch) nicht mit Werten gefüllt wurde heisst es nicht, dass es sie nicht gibt.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 15-11-2010, 14:38   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2010
Beiträge: 18
Also wäre dann ein Preloader für die XML-Datei ein Lösungsansatz?
derandi80 ist offline   Mit Zitat antworten
Alt 15-11-2010, 14:42   #10 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Du scheinst Dir Grundlagen der Codeverarbeitung nicht ganz verstanden zuhaben:
  • Grundsätzlich wir Code von oben nach unten abgearbeitet.
  • Code innerhalb einer Funktion wird jedoch nicht dort ausgeführt, wo diese deklariert wurde, sondern dort wo sie aufgerufen wird.
  • Funktionen können entweder direkt im Script (myFunc();), oder über ein Ereignis onLoad, onRelease aufgerufen werden und können ihrerseits andere Funktionen aufrufen.
Deshalb gehört jedes Script, was nicht vor allem anderen ausgeführt werden soll in eine Funktion. thomas_E hat Dir dazu ja ein Beispiel gepostet.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (15-11-2010 um 14:48 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 15-11-2010, 14:44   #11 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
Also wäre dann ein Preloader für die XML-Datei ein Lösungsansatz?
nein, du hast doch schon einen Loader, und selbst wenn die Datei direkt ausm Browsercache kommt ist sie wahrscheinlich erst nach Abarbeitung des restlichen Scriptes da.

die Lösung ist, alles was mit den Daten weiter gemacht werden soll, in irgendeiner Form von onLoad ausführen zu lassen.
(siehe in meiem Beispiel die Funktion machWas())
Das ist eine sehr allgemeine Aussage, nur konkreter kann ich dir erst helfen, wenn ich weiss, was du vorhast.
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (15-11-2010 um 14:49 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 15-11-2010, 14:52   #12 (permalink)
Neuer User
 
Registriert seit: Nov 2010
Beiträge: 18
Ich habe vor Urls aus einer XML-Datei zulesen. Diese Links sollen dann für ein Navigationsmenu zur Verfügung stehen. Mit dem onPress-Event und Geturl soll dann zu den Seiten gesprungen werden.
Meine Idee ich lese die Links aus einer XML-Datei aus und schreibe sie in ein Array. Den Inhalt nehme ich dann für die GetUrl-Fkt. Nur bin ich am bisherigen Probleme hängen geblieben
derandi80 ist offline   Mit Zitat antworten
Alt 15-11-2010, 16:23   #13 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Servus
Das was thomas_E, geschrieben hast, ist doch genau das was Du brauchst!
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 16-11-2010, 08:21   #14 (permalink)
Neuer User
 
Registriert seit: Nov 2010
Beiträge: 18
Moin,

ja im Grunde schon. Nur tritt das Problem auf das alles was innerhalb der Onload passiert Fkt., genauer die Wert Zuweisung einer Variabel, außerhalb nicht definiert ist bzw. keine Werte enthält.

Ein Versuch eine txt-Datei mit loadvariables brauchte das gleiche Ergebniss.
Nur innerhalb der Onload-Fkt. sind die ausgelesenen Werte vorhanden.
Aushalb nicht, obwohl sie an "global" definierten Variabeln übergeben wurden.


Ich versuche es mal mit Pseudocode zu erklären.

//Lese aus einer einer xml-Datei die URLs für ein Navigationsmenu

XML-Datei-Aufbau(navigation.xml)

Code:
<?xml version="1.0" encoding="utf-8"?>
<navigation>
<link name = "link1" ziel= "link1.html"/>
...
<navigation/>
Actionscript

Code:
programm XML-Auslesen

Definiere Array() linkziel

Definiere neues XML-Objekt 
Übergebe (navigation.xml) an XML-Objekt

Aufruf Prozedur: Onload
    
    Wenn die Datei naviagation.xml erfolgreich geladen dann
       
        Durchlaufe alle Knoten von "navigation" und speicher
        die Werte von "ziel" in dem Array "linkziel"

    Wenn die Datei nicht erfolgreich geladen dann 

        Fehler ausgeben

Ende Prozedur Onload
     

//Anwendnung mit getURL
//Das Auslesen ergibt ein "undefined"

Rufe externe Webseite auf

oder

Geb den Inhalt des Arrays linkziel aus
Danke, für jeden Tipp.
derandi80 ist offline   Mit Zitat antworten
Alt 16-11-2010, 08:33   #15 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Ich versuchte Dir schon mit normalem Text, etwas zu erklären!
thomas_E hat Dir in seinem Beitrag (Nr. 6) schon gezeigt wie es geht!!!
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
array, funktion, xml

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Flex: XML-Result außerhalb einer private Funktion verwenden Rohality Flex programmieren 3 14-10-2009 12:09
Auf Varibale, definiert außerhalb einer Klasse, zugreifen lindner ActionScript 3 7 22-06-2009 06:04
Variable außerhalb einer Funktion weiterverwenden eugen2k ActionScript 2 3 06-09-2007 11:31
Variablen außerhalb der Funktion werden nicht übergeben Blax_ed ActionScript 2 5 10-05-2007 20:35
inhalt eines array außerhalb einer funktion anzeigen rok°! ActionScript 1 6 24-03-2005 17:49


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele