| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Flexer 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 |
| | |
| | #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 |
| | |
| | #3 (permalink) |
| Flexer Registriert seit: Apr 2009
Beiträge: 3
|
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... |
| | |
![]() |
| Lesezeichen |
| Stichworte |
| async token, mysql, object, php |
| Themen-Optionen | |
| Ansicht | |
| |