Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-04-2009, 14:11   #1 (permalink)
Flexer
 
Benutzerbild von babel
 
Registriert seit: Apr 2009
Beiträge: 3
Hilfe bei einem Async token (Flex>PHP>MySQL)

Hallo,
bin zwar neu hier, aber ich wag es trotzdem mal eine Frage zu stellen/um Hilfe zu bitten.

Ich habe mit flexbuilder eine projekt mit php-server-language erstellt und eine verbindung zu einer lokalen SQL Datenbank hergestellt.

Das automatisch erstellte Script funktioniert auch tadellos, aber wenn ich aus der ArrayCollection die normalerweise zurückgegeben wird ein objekt bzw. wert vom Objekt ziehen möchte (in meine Falle: ArrayCol.getItemAt(0).uidCol)geht das nicht (Geht nur in Verbindung zu einer direkten bindung mit einem DataGrid).

Ich habe das script, dass mit php script kommuniziert ein wenig verändert, so dass es eig. ein Objekt zurückgeben würde. Es ist sichergestellt, dass das Objekt zu finden ist mit dem searchstring der gepasst wird.

Verwunderlicherweise geht das Ergebnis allerding unterwegs verloren (Siehe unten).
Ich habe den Verdacht, dass das an einem komischen verhalten bei Async Tokens liegen könnte, krieg aber nirgendwo raus warum sich das alles so verhält.


Bitte helft mir



Code:
private function getThis(searchString:String):Object
{

     var temp:Object = new Object();
    var desc:Boolean = false;
    var orderField:String = '';    

	
var uidCol:String;

    var parameters:* =
    {
        "orderField": orderField,
        "orderDirection": (desc) ? "DESC" : "ASC", 
        "filter": searchString
    }
	/**
	 *  "select" command ausführen
	 */
    searchRequest("FindAll", parameters);
   
  
	    function searchRequest(method_name:String, parameters:Object):void
		{
	    parameters['method'] = method_name;
	
	    gateway.request = parameters;
	
	    var call:AsyncToken = gateway.send();
	    call.request_params = gateway.request;
	    call.handler = searchReqHandler
	   
	   
		    function searchReqHandler(e:Object):void
		    {
			    if (e.isError)
			    {
			        Alert.show("Error: " + e.data.error);
			    } 
			    else
			    {    	
			        i++;
			        for each(var row:XML in e.data.row) 
			        {
			            temp = new Object();
			            for (var key:String in fields) //fields = row names
			            {
			                temp[key + 'Col'] = row[key];
			            }					

			            uidCol = temp.uidCol;
			            trace(uidCol); // Gibt>Ergebnis		        	
			        }			        				
			        trace(uidCol); // Gibt>Ergebnis
			    }
			    trace(uidCol); // Gibt>Ergebnis		  
	         }
		trace(uidCol); // Gibt>null			
	}
	 trace(uidCol); // Gibt>null		
	 return temp //bringt nix weil leer
}
???
Hat jemand ne Idee?

Wenn irgendetwas an meinem scriptstück unklar ist, tut mir Leid
babel ist offline   Mit Zitat antworten
Alt 23-04-2009, 08:27   #2 (permalink)
Neuer User
 
Registriert seit: Mar 2009
Ort: Braunschweig
Beiträge: 164
Hallo,

da liegt ein Mißverständnis vor, wie der Ablauf des ganzen ist.

1. Die Funktion 'getThis' läuft ab und legt die Funktion 'searchReqHandler'
als Handler für den Request fest.
2. Die Funktion 'getThis' ist beendet.'uidCol' ist eine lokale Variable
von 'getThis' und wurde nicht zugewiesen (ist also noch 'null' wie die traces aussagen).
Gleiches gilt für 'temp'.
3. Der Request wird beantwortet. Jetzt läuft die Funktion 'searchReqHandler' ab,
die als Handler festgelegt wurde. Das korrekte Ergebnis wird ausgegeben
und die Funktion 'searchReqHandler' wird beendet. Das Ergebnis liegt im Nirwana
in den nicht mehr existierenden lokalen Variablen 'uidCol' und 'temp'.

Also: Ergebnisse einer Handler Funktion nicht in lokalen Variablen unterbringen!

Grüße,
Matthias Kievernagel
mkiever ist offline   Mit Zitat antworten
Alt 24-04-2009, 13:46   #3 (permalink)
Flexer
 
Benutzerbild von babel
 
Registriert seit: Apr 2009
Beiträge: 3
Thumbs up

Vielen dank für die schnelle Antwort,
das Problem ist nun endlich gelöst, und ich bekomme ein wunderbares object "zurückgegeben".
(PS: Deine Art zu erklären ist gut )

Mit viel rumgebastel ist es nun zu folgendem gekommen:

Code:
private function getThis(searchString:String):void
{

    var desc:Boolean = false;
    var orderField:String = '';    


    var parameters:* =
    {
        "orderField": orderField,
        "orderDirection": (desc) ? "DESC" : "ASC",
        "filter": searchString
    }

    searchRequest("FindAll", parameters);
   
 
        function searchRequest(method_name:String, parameters:Object):void
        {
       
        parameters['method'] = method_name;
    
        gateway.request = parameters;
    
        var call:AsyncToken = gateway.send();
        call.request_params = gateway.request;
        call.handler = searchReqHandler


        }     



}



private function searchReqHandler(e:Object):void
            {
                if (e.isError)
                {
                    Alert.show("Error: " + e.data.error);
                }
                else
                {       


                    for each(var row:XML in e.data.row)
                    {                        
                        for (var key:String in fields)
                        {
                            temp[key + 'Col'] = row[key];
                        }                    
                    }    
                }
               search = new Event("se"+friendCount);
               dispatchEvent(search); 
}


vielen Dank,
babel
__________________
In the beginning was the Word. And the Word was grouped with other Words to form arrays...
babel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
async token, mysql, object, php

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 13:11 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele