Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-12-2003, 11:28   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 28
Problem mit Flash´s asynchronen Verhalten

Hallo zusammen,
ich möchte bei einer Funktion true oder false zurückgeben wenn ein request erfolgreich vom Server zurückgegeben wurde.
zB
ActionScript:
  1. function sendRequest() {
  2.   request = new XML("<request><type>test</type></request>");
  3.   request.ignoreWhite = "true";
  4.   request.contentType = "text/xml";
  5.  
  6.   response = new XML();
  7.   response.ignoreWhite = "true";
  8.   response.contentType = "text/xml";
  9.   response.onLoad = readResponse;
  10.  
  11.   erfolgreich = request.sendAndLoad("http://url+servlet", response);
  12.  
  13.   return erfolgreich;
  14. }

Die Variable erfolgreich ist beim obigen Beispiel immer true auch wenn der Webserver gestopt worden ist und somit keine Verbindung möglich ist.
In der Funktion readResponse(success) bekomm ich jedoch true|false zurück nachdem sendAndLoad(..) abgeschlossen ist.
Somit frage ich diesen Wert ab und habe das Problem das nichts zurückgegeben wird (erfolgreich == null):

ActionScript:
  1. erfolgreich = sendRequest();
  2.  
  3. function sendRequest() {
  4.   request = new XML("<request><type>test</type></request>");
  5.   request.ignoreWhite = "true";
  6.   request.contentType = "text/xml";
  7.  
  8.   response = new XML();
  9.   response.ignoreWhite = "true";
  10.   response.contentType = "text/xml";
  11.   response.onLoad = readResponse;
  12.  
  13.   request.sendAndLoad("http://url+servlet", response);
  14.  
  15.   _root.createEmptyMovieClip("timer",10);
  16.   _root.timer.onEnterFrame = function() {
  17.     if(success != null) {
  18.       trace("ok");
  19.       _root.timer.removeMovieClip();
  20.       return success;
  21.     }
  22.   }
  23. }

so long
newton
newton ist offline   Mit Zitat antworten
Alt 09-12-2003, 11:36   #2 (permalink)
.--. .. ..- ...
 
Benutzerbild von pius
 
Registriert seit: Jul 2002
Ort: munich
Beiträge: 1.345
'sendAndLoad' hat angeblich keinen Rückgabewert ...


aber du definierst doch eh:

ActionScript:
  1. response.onLoad = readResponse;


readResponse ist doch bestimmt eine Methode ... in der du prüfen könntest, ob der server auch tatsächlich Daten gesendet hat ...
__________________
one out of many
pius ist offline   Mit Zitat antworten
Alt 09-12-2003, 14:00   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 28


wer lesen kann ist klar im vorteil!
also nochmal:

1. sendAndLoad gibt immer true zurück!
2. ich möchte nicht in der Funktion readResponse prüfen ob der Server den request richtig verarbeitet hat (mach ich sowieso) sondern in der Funktion sendRequest true oder false zurückgeben, da aber das Protokoll erst an den Server geschickt und die Antwort wieder empfangen werden muss bekomm ich immer null zurück (1. Codesnip - Ablauf dauert zu lange).
Im 2. Codesnip frag ich den in der Funktion readResponse erhaltenen Wert success (der mir sagt ob der Server nun was geschickt hat oder nicht) solange ab bis ich true oder false zurückbekomme und gib erst dann diesen wert zurück, allerdings wartet flash nicht auf diesen return Wert und setzt 'erfolgreich' auf null.. wie kann ich das umgehen dass 'erfolgreich' diesen erhaltenen wert übergeben bekommt ohne ihn einfach in der readResponse Funktion in die Variable zu speichern sodass ich diesen im nachhinein wieder abfragen muss?
newton ist offline   Mit Zitat antworten
Alt 09-12-2003, 14:20   #4 (permalink)
.--. .. ..- ...
 
Benutzerbild von pius
 
Registriert seit: Jul 2002
Ort: munich
Beiträge: 1.345
'2.' -> eben


mit senAndLoad startest du sozusagen einen neuen thread, der selbständig weiterläuft, wenn 'onLoad' erzeugt wird ...


was willst du denn mit

ActionScript:
  1. erfolgreich = request.sendAndLoad("http://url+servlet", response);
  2.        
  3.         return erfolgreich;

anfangen?


aus der Referenz:
Zitat:
XML.sendAndLoad

Verfügbarkeit
Flash Player 5.

Verwendung
meinXML.sendAndLoad(url,zielXMLobjekt)

Rückgaben
Keine.
Zitat:
wer lesen kann ist klar im vorteil!


... oder willst du prüfen, ob flash eine methode ausführt, wenn du angibst, dass es eine ausführen soll?
__________________
one out of many
pius ist offline   Mit Zitat antworten
Alt 09-12-2003, 15:29   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 28
tja eben..
keine Rückgaben ..desshalb wird im ersten Codesnip immer true zurückgegeben.
(beachte 2. Codesnip)
möchte nicht das 'erfolgreich' einen NULL-Wert bekommt bevor nicht success in der Funktion readResponse gesetzt worden ist.

noch nicht verständlich?

'erfolgreich' führt die Funktion sendRequest() aus und sollte die erhaltene Variable success der Funktion readResponse() zurückbekommen..
newton ist offline   Mit Zitat antworten
Alt 09-12-2003, 15:35   #6 (permalink)
.--. .. ..- ...
 
Benutzerbild von pius
 
Registriert seit: Jul 2002
Ort: munich
Beiträge: 1.345

ActionScript:
  1. _root.timer.onEnterFrame = function() {
  2.                 if(success != null) {
  3.                         trace("ok");
  4.                         _root.timer.removeMovieClip();
  5.                         return success;
  6.                 }
  7.         }

woher soll der 'oEF' denn auf 'success' zugreifen können?


sorry, geb' mir echt mühe deine script irgendwie zu interpretieren, aber ich weiss echt nicht, was du da eigentlich bastelst ...

... warum baust du den 'oEF' überhaupt ein, wenn es das 'onLoad' gibt ??

entweder das ganze ist woodoo und ich komm nicht dahinter, oder das konzept ist suboptimal ...
__________________
one out of many
pius ist offline   Mit Zitat antworten
Alt 09-12-2003, 15:37   #7 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Du kannst an Flash asynchronem Verhalten nichts ändern.
Wenn du unbedingt auf das Ergebnis warten willst, dann musst du vor dem Request alles anhalten und dann bei onLoad wieder alles starten. Die Antwort deines Servers kannst du dann aus dem LoadVars-Objekt auslesen.

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 09-12-2003, 15:50   #8 (permalink)
.--. .. ..- ...
 
Benutzerbild von pius
 
Registriert seit: Jul 2002
Ort: munich
Beiträge: 1.345
@bokel

hallo
ja, das habe ich die ganze zeit zu sagen versucht ....

übrigends, 'phybas' ist jetzt online (du erinnerst dich?) ... mit ASB gebaut ... funzt prima
__________________
one out of many
pius ist offline   Mit Zitat antworten
Alt 09-12-2003, 16:04   #9 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
@pius: Ja stimmt, das hast du auch gesagt
Aber newton hat es irgendwie nicht verstanden.
Deshalb habe ich es einfach nochmal gesagt.

[OT]
PHYBAS, ja ich erinnere mich dunkel, das war dieses Simulationsdingbums für deine Uni, oder ?
Herzlichen Glückwunsch !
[/OT]

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 09-12-2003, 16:17   #10 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 28
@bokel
gut, du hasts verstanden..

wie kann ich alles anhalten und dann bei onLoad wieder starten?
habs schon mit stop() versucht, ging aber nicht richtig..

kannst mir das ins snippet einfügen?
newton ist offline   Mit Zitat antworten
Alt 09-12-2003, 16:49   #11 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Mit einem allgemeinen Snippet kann ich dir nicht dienen, es kommt darauf an, was du erreichen möchtest. Was möchtest du denn anhalten ?

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 10-12-2003, 08:37   #12 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 28
ich möchte das zu frühe setzen der Variable 'erfolgreich' verhindern (wird durch asynchrones Verhalten gesetzt bevor die Antwort vom Server zurückgekommen ist).. diesen Vorgang möchte ich anhalten wenns irgendwie geht..sodass erst nach der antwort des Servers 'erfolgreich' gesetzt wird sonst bekomm ich immer null zurück.

Angenommen ich möchte einen user mit

ActionScript:
  1. login = login(user, password);

einloggen (Die login-Funktion ist ähnlich wie die sendRequest-Funktion aufgebaut.) und möchte das login(user, password) true oder false zurückgibt je nach dem ob der login im Hintergrung erfolgreich war oder nicht.

mbd
newton ist offline   Mit Zitat antworten
Alt 10-12-2003, 08:50   #13 (permalink)
.--. .. ..- ...
 
Benutzerbild von pius
 
Registriert seit: Jul 2002
Ort: munich
Beiträge: 1.345
dann sollte der server eine Antwort im XML-Format zurückschicken, in der steht, ob der LogIn erfolgreich war ...

du erfährst ob die Antwort angekommen ist, in dem du abwartest, bis der 'onLoad'-Handler aufgerufen wird ... dann musst du sie auswerten, die generierte Antwort ...

... denn der server wird ja wohl 'fast' immer antworten, ob mit 'access' oder 'denied' ...


den Rest hälst du an, indem einfach keine weiteren Methodenaufrufe folgen ... und der Thread erst ab dem 'onLoad' weitergeht ...
__________________
one out of many
pius ist offline   Mit Zitat antworten
Alt 10-12-2003, 10:25   #14 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
@newton:
So funktioniert Flash nicht. Flash kann nicht "sleepen" bis das Ergebnis da ist. Stattdessen musst du selbst den Programmfluss so anlegen, das er unterbrochen wird. Das kannst du z.B. mit Frames machen .

Beim Absenden des Request hälst du die Zeitleiste mit stop () an und beim Empfangen der Antwort startest du sie wieder mit play()

mfg r.
bokel ist offline   Mit Zitat antworten
Alt 10-12-2003, 12:43   #15 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Beiträge: 28
@bokel

schade das flash nicht 'sleepen' kann..

naja..ich werd das anders verwirklichen müssen, mit Frames möcht ich das nicht machen.

trozdem danke,
newton
newton 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 05:11 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele