Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-06-2004, 09:26   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 8
Variablen aus der Funktion

Hi Ihr,
ich muss als blutige Anfänger eine XML Schnittstelle basteln und habe folgendes Problem:
Hier ein paar Code-Brocken:

external_xml.ignoreWhite = true;
external_xml.load("fragen_speed.xml");
external_xml.onLoad = function(success) {

trace("xml loaded successfully.");
for (aktKnotenID=0; aktKnotenID<this.childNodes.length; aktKnotenID++) {
aktKnoten = this.childNodes[aktKnotenID];

if (aktKnoten.nodeName == "frage") {
$fragen_ar.push(aktKnoten.attributes["ftext"]);
$antworten_ar.push(aktKnoten.attributes["antwort1"]);
$antworten_ar.push(aktKnoten.attributes["antwort2"]);
$antworten_ar.push(aktKnoten.attributes["antwort3"]);
$antwortenR_ar.push(aktKnoten.attributes["antwortR"]);
}
}


Das geht noch ein Stück weiter. Das tut auch so weit. Wenn das ganze fertig ist, kann ich nicht mehr ausserhalb der Funktion auf die Arrays zugreifen. Was muss ich ändern. Ich hab die Arrays vorher ausserhalb mit var definiert und auch wenn ich _global. nutze tut das ganze nicht.

Danke schon mal
Al

Geändert von AL_Samba (22-06-2004 um 09:27 Uhr)
AL_Samba ist offline   Mit Zitat antworten
Alt 22-06-2004, 10:28   #2 (permalink)
The Man Who Wasn't There
 
Benutzerbild von fraggle two
 
Registriert seit: Jul 2003
Ort: BÄRLIN
Beiträge: 1.156
hi,

bin mit xml nicht so firm aber die $-zeichen haben da wohl nix zu suchen...

PHP-Code:
if (aktKnoten.nodeName == "frage") {
_root.fragen_ar.push(aktKnoten.attributes["ftext"]);
_root.antworten_ar.push(aktKnoten.attributes["antwort1"]);
_root.antworten_ar.push(aktKnoten.attributes["antwort2"]);
_root.antworten_ar.push(aktKnoten.attributes["antwort3"]);
_root.antwortenR_ar.push(aktKnoten.attributes["antwortR"]);

dann müßten die vars z.B. über _root.fragen_ar abzufragen sein.

gruß
mike
__________________
Dot-Realities
Mike Broders
Berlin

ICQ:105925103

Dot-Realities v4.0 under construction!
fraggle two ist offline   Mit Zitat antworten
Alt 22-06-2004, 10:55   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 8
Danke für deine Antwort,
das $ Zeichen diehnte nur als Teil des Variablen Namens, da ich vorher viel PHP programmiert hab. Tut jetzt immer noch nicht. Liegt das vielleicht darann, das es onLoad ausgeführt wird?
Grüße
Al
AL_Samba ist offline   Mit Zitat antworten
Alt 22-06-2004, 11:21   #4 (permalink)
The Man Who Wasn't There
 
Benutzerbild von fraggle two
 
Registriert seit: Jul 2003
Ort: BÄRLIN
Beiträge: 1.156
...


PHP-Code:
external_xml.onLoad = function(success) {
if(
success){
trace("xml loaded successfully.");
for (
aktKnotenID=0aktKnotenID<this.childNodes.lengthaktKnotenID++) {
aktKnoten this.childNodes[aktKnotenID];

if (
aktKnoten.nodeName == "frage") {
_root.fragen_ar.push(aktKnoten.attributes["ftext"]); 
_root.antworten_ar.push(aktKnoten.attributes["antwort1"]); 
_root.antworten_ar.push(aktKnoten.attributes["antwort2"]); 
_root.antworten_ar.push(aktKnoten.attributes["antwort3"]); 
_root.antwortenR_ar.push(aktKnoten.attributes["antwortR"]); }
}
}else{
trace("laden fehlgeschlagen!")
}

du solltest einen fehlgeschlagenen ladevorgang schon abfangen...
da hatte ich auch schon probleme.

ach ja mach den load-aufruf mal erst nach der onLoad definition.

weiß aber nicht obs jetzt die lösung ist...

gruß
mike
__________________
Dot-Realities
Mike Broders
Berlin

ICQ:105925103

Dot-Realities v4.0 under construction!

Geändert von fraggle two (22-06-2004 um 11:22 Uhr)
fraggle two ist offline   Mit Zitat antworten
Alt 22-06-2004, 11:26   #5 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 8
Ja du hast recht, aber wenn ich in über Fehlersuche --> Variablen auflisten nachschaue, dann sind die Arrays auch richtig gefüllt, ich kann halt nur nicht darauf zugreifen,ausserhalb der Funktion. Dann werden sie als undefined angezeigt.
AL_Samba ist offline   Mit Zitat antworten
Alt 22-06-2004, 13:19   #6 (permalink)
The Man Who Wasn't There
 
Benutzerbild von fraggle two
 
Registriert seit: Jul 2003
Ort: BÄRLIN
Beiträge: 1.156
...

wie fragst du denn die variablen ab?

ich geh jetzt mal von folgender sache aus:

_root.external_xml=new XML();

dann hast du auf _root dein XML-Objekt.

wenn du jetzt sagst:

_root.external_xml.load("fragen_speed.xml");

kannst du nur über die referenzierung zum XML-Objekt an deine variablen ran.(_root.external_xml.deineVars)

aber ich glaube es geht bei dir ja um die arrays fragen_ar, antworten_ar usw. oder?

wenn sie als gefüllt im debugger angezeigt werden ist es eigentlich nur nen pfadproblem beim aufruf.

gruß
mike
__________________
Dot-Realities
Mike Broders
Berlin

ICQ:105925103

Dot-Realities v4.0 under construction!
fraggle two ist offline   Mit Zitat antworten
Alt 22-06-2004, 13:47   #7 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 8
Danke noch mal für deine fixen Antworten. Den Fehler hast du richtig erkannt. Aber er möchte immer noch nicht. Allerdings meckert Flash auch rum, wenn ich bei der Initialisierung
var _root.external_xml = new XML();
schreibe.
var external_xml = new XML();
funktioniert aber.
AL_Samba ist offline   Mit Zitat antworten
Alt 22-06-2004, 15:45   #8 (permalink)
The Man Who Wasn't There
 
Benutzerbild von fraggle two
 
Registriert seit: Jul 2003
Ort: BÄRLIN
Beiträge: 1.156
...

wie rufst du denn nun deine variablen ab?

gruß
mike
__________________
Dot-Realities
Mike Broders
Berlin

ICQ:105925103

Dot-Realities v4.0 under construction!
fraggle two ist offline   Mit Zitat antworten
Alt 22-06-2004, 19:22   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 8
Ja gar nicht, Hab schon verschieden sachen Probiert:
_root.Variablenname
_root.external_xml.Variablenname
Variablenname
Tut alles nicht. :-(
AL_Samba ist offline   Mit Zitat antworten
Alt 22-06-2004, 23:03   #10 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
wo definierst du denn deine arrays?
sofern du die später noch verwenden willst musste die natürlich auf ner zeitleiste ablegen.
PHP-Code:
external_xml.referenz=this

external_xml
.onLoad = function(success) {
this.referenz.$antworten_ar=[]
//hier gehts weiter mim pushen
//..

falls du die arrays nicht per "var deinArray=[]" innerhalb der funktion initialisierst sondern nur per

deinArray=[]

innerhalb der funktion
solltest du deine arrays trotzdem im _root wiederfinden,das is die "notlösung" von flash, wenns nich weiter weiß wo du die dinger haben willst
is aber schlechter stil- lieber alles direkt angeben, dann weißte auch wo die variablen liegen


deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 23-06-2004, 07:50   #11 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 8
Hier mal das ganze Ding:
PHP-Code:
var external_xml = new XML();
var 
fragen_ar = new Array();
var 
antworten_ar = new Array();
var 
antwortenR_ar = new Array();
var 
antwortenR = new Array();
var 
ausgewaelteFragen_ar = new Array();
var 
antworten = new Array();
var 
fragen1;
var 
arrayGroesse;
var 
id;
var 
nils;


external_xml.ignoreWhite true;
external_xml.load("fragen_speed.xml");
external_xml.onLoad = function(success) {
   
     
trace("xml loaded successfully.");
     for (
aktKnotenID=0;  aktKnotenID<this.childNodes.lengthaktKnotenID++) {
     
aktKnoten this.childNodes[aktKnotenID];
        
        if (
aktKnoten.nodeName == "frage") {
            
fragen_ar.push(aktKnoten.attributes["ftext"]);
            
antworten_ar.push(aktKnoten.attributes["antwort1"]);
            
antworten_ar.push(aktKnoten.attributes["antwort2"]);
            
antworten_ar.push(aktKnoten.attributes["antwort3"]);
            
antwortenR_ar.push(aktKnoten.attributes["antwortR"]);
        }
     }
     
     
//Zufallsgenerator
     
     
arrayGroesse fragen_ar.length;
    
      for (
i=0i<3i++){ //Hier noch für i die benötigte Anzahl der Fragen eintragen
            
          
id random(arrayGroesse);

          
ausgewaelteFragen_ar.push(fragen_ar[id]);
          
fragen_ar.splice(id1);
          
          
arrayGroesse arrayGroesse -1;
          
          
trace("ID: "+id);
          
          
//richtige Antwort raussuchen+löschen
          
antwortenR.push(antwortenR_ar[id]);
          
antwortenR_ar.splice(id1);
          
          
//passende Antworten raussuche
          
if (id>0){
              
f_id id *
          }
          else{
              
f_id id;
          };
                    
          for (
j=1j<4j++){
              
antworten.push(antworten_ar[f_id]);
              
antworten_ar.splice(f_id1);
              
trace("f_id: "+f_id);
         } ;
        };
}; 
Das Ding ist nicht mehr ganz orginal, hab schon ein paar von den Vorschlägen getestet. Ich brauch einen Zugriff auf die Arrays und zwar ausserhalb der Funktion. Mittlerweile glaube ich sogar, das mein Flash nicht richtig installiert ist.
Danke euch allen schon mal im vorraus.
Al
AL_Samba ist offline   Mit Zitat antworten
Alt 23-06-2004, 13:37   #12 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 8
Ich glaube ich hab den Fehler, mir fehlt aber die Lösung:
Er arbeitet zu erst das andere ab und dann den onLoad Teil. Also kennt er die variablen zum Zeitpunkt der Abfrage garnicht.
Grüße Nils
AL_Samba ist offline   Mit Zitat antworten
Alt 23-06-2004, 13:57   #13 (permalink)
Neuer User
 
Registriert seit: Mar 2004
Beiträge: 70
Du hast ein Problem mit dem Scope wenn du die Variablen außerhalb des onLoad-Blocks deklarierst!

Beim onLoad befindest du dich im Kontext des XML-Objekts, das kennt nur die eigenen Variablen. Da ich jetzt zu faul bin bekommst du hier von mir einen "Dirty Workaround":

PHP-Code:
var external_xml = new XML();
var 
fragen_ar = new Array();
var 
antworten_ar = new Array();
var 
antwortenR_ar = new Array();
var 
antwortenR = new Array();
var 
ausgewaelteFragen_ar = new Array();
var 
antworten = new Array();
var 
fragen1;
var 
arrayGroesse;
var 
id;
var 
nils;


external_xml.ignoreWhite true;
external_xml.scope this//Den aktuellen Kontext an das XML-Objekt mitliefern 
external_xml.load("fragen_speed.xml");
external_xml.onLoad = function(success) {
   
     
trace("xml loaded successfully.");
     for (
aktKnotenID=0;  aktKnotenID<this.childNodes.lengthaktKnotenID++) {
     
aktKnoten this.childNodes[aktKnotenID];
        
        if (
aktKnoten.nodeName == "frage") {
            
this.scope.fragen_ar.push(aktKnoten.attributes["ftext"]);
            
this.scope.antworten_ar.push(aktKnoten.attributes["antwort1"]);
            
this.scope.antworten_ar.push(aktKnoten.attributes["antwort2"]);
            
this.scope.antworten_ar.push(aktKnoten.attributes["antwort3"]);
            
this.scope.antwortenR_ar.push(aktKnoten.attributes["antwortR"]);
        }
     }
      ...... 
Jetzt kannst du ganz normal auf antwortenR_ar in deinem Kontext anschließend zugreifen!

Wenn der Zugriff automatisch passiert solltest du allerdings aufpassen, da die Variablen wahrscheinlich erst später vollständig eingelesen sind.

Zur Lösung dazu noch ein "dirty Hack":
PHP-Code:
function continue(){
    
//Hier das weitere Vorgehen nachdem das XML geladen ist
}

....
//im onLoad-Block kannst du dann ganz am Ende machen
this.scope.continue(); 
So, hoffe das hilft n Schritt weiter
Benjy ist offline   Mit Zitat antworten
Alt 24-06-2004, 13:18   #14 (permalink)
Neuer User
 
Registriert seit: Jun 2004
Beiträge: 8
Danke, aber ich habs jetzt:
ich vermute, das das Pharsen und sortieren zu lange dauert.
Ich hab das jetzt einfach in ein eigenes Schlüsselbild gesteckt. 10 Bilder später funktionier das ganze dann einwand frei!!!!
Danke euch nochmal
Al
AL_Samba ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele