loadVars & return-Value

teccco

Erfahrenes Mitglied
Einen recht guten Tag wünsche ich euch.

Es geht bei meinem Problem zum x-ten Mal um das LoadVars-Objekt und seine Eigenschaften.

Status Quo:

Ich habe eine php-Datei der ich einen Wert uebergebe und die daraufhin einen Datensatz aus der Datenbank fetched und diesen in dieser Form ausgibt (beispielhaft): "&var1=".urlencode($val1)."&var2="..... das klappt natuerlich auch problemlos.

Innerhalb von Flash lese ich diese Variablen + ihre Werte mit Hilfe des loadVars-Objektes aus.

Mein Ziel:

Den zusammengebastelten String als return-Value zurueckzugeben.

Das Problem:

Ich bekomme immer als Rückgabewert "undefined". Benutze ich die Variable an der selben Stelle wie die return-Anweisung andersweitig wie z.bsp. direkt durch trace() ausgeben lassen oder einer Funktion übergeben, funktioniert das wunderbar.

Aber: ich will doch einfach nur einen return-Value haben und keinen anderen Funktionsaufruf. Daher steht für mich auch die Option einer CallBack-Funktion eigentlich nicht zur Debatte.

Ich weiß, dass es wahrscheinlich daran liegt, dass die Werte zu diesem Zeitpunkt noch nicht geladen sind, daher ja auch "undefined", verstehe aber ehrlich gesagt überhaupt nicht warum ich sie dann an exakt der gleichen Stelle durch trace() ausgeben kann.

Mein Script:

Code:
function getInhalt(section) {
    
    var inhalt_temp:String = "";
    
    inhalt_vars = new LoadVars();
        
    inhalt_vars.onLoad = function (success) {
     
         if (success) {
            
            trace("text wurde erfolgreich geladen");
            
            inhalt_temp += unescape(this.headline)+"<br><br>";
            inhalt_temp += unescape(this.displaytext);

            return inhalt_temp;
            
        }

        else {

           trace("text konnte nicht geladen werden");

       }
    }
    
    inhalt_vars.load("getcontent.php?section="+section,"POST");
}
Ich bedanke mich schonmal im Voraus.

MfG, teccco
 
Hi,

das wird so nicht funktionieren, da LoadVars.load asynchron arbeitet. Wenn die onLoad-Funktion aufgerufen wird (sprich: die Daten angekommen sind), ist die Funktion "getInhalt" schon längst beendet und kann nichts mehr zurückgeben. Flash wartet ja nicht auf das Laden der Daten, sondern führt munter weiter Code aus ... und irgendwann dann halt onLoad. Das ist auch gut so, sonst würde Dein Film ja hängen, wenn es mal wieder länger dauert mit den Daten. ;)

Gruß
.
 
Ja, dieses Problems bin ich mir bewusst. Aber es muss doch einen Weg geben das trotzdem abzufangen oder anders gesagt:

Gibt es eine plausible Begründung warum ich den Wert nicht als Rückgabewert zurückgeben kann aber ein trace() mir den Wert _immer_ ausgibt (wobei _immer_ wahrscheinlich auch relativ ist)?
 
Hallo,

der return findet sehr wohl statt, hat aber nichts mit deiner getInhalt-Funktion zu tun, sondern mit der onLoad-Funktion, die wiederum nichts zurückgeben kann. Abgesehen davon müsstest du den Rückgabe-Wert mit einem Loop ständig überprüfen, da der onLoad-Event nicht als Bedingung für das Weiterverarbeiten des restlichen Codes gilt. Du könntest aber mit einem Loop eine Variable überprüfen, die bei onLoad gesetzt wird:

PHP:
var isLoaded;
var inhalt_temp = "";


function getInhalt(section) {
    
    var inhalt_temp:String = "";
    
    inhalt_vars = new LoadVars();
        
    inhalt_vars.onLoad = function (success) {
     
         if (success) {
            
            trace("text wurde erfolgreich geladen");
            
            inhalt_temp += unescape(this.headline)+"<br><br>";
            inhalt_temp += unescape(this.displaytext);
            
            //
            _root.isLoaded = true;
            _root.inhalt_temp = inhalt_temp;
            
        }

        else {

           trace("text konnte nicht geladen werden");

       }
    }
    
    inhalt_vars.load("getcontent.php?section="+section,"POST");
}
this.onEnterFrame = function () {
    if (this.isLoaded == true) {
        this.isLoaded = false;
        trace ("Successfully loaded: " +_root.inhalt_temp);
    }
}

gruss
 
Ich glaube das ist eine Lösung die mir gerade so zusagen könnte :) Werde es nachher gleich mal implementieren.

Vielen Dank an euch so weit.
 
Hab mit der Lösung ein wenig rum "gespielt" und festgestellt, dass ich das ganze anders lösen werde.

Vielen Dank an euch.

MfG, teccco
 
Zurück