Der Martin: Problem mit Rückgabewert

Beitrag lesen

Hallo,

um das mal Schritt für Schritt zu verstehen.
Ich rufe mit der Funktion getKBInfo().

so wie weiter unten beschrieben:

var sqlAnswer = getDataFromSQL('KB');

return sqlAnswer;

  
Das ist aber so, wie du es formuliert hast, schon Unsinn.  
  

> Diese macht dann meinen Ajax Request.  
  
Richtig formuliert: Diese Funktion sendet den Request. Mehr erstmal nicht.  
  

> Wird dann nicht gewartet bis sqlAnswer eine Antwort von der Funktion erhalten hat, sondern läuft sofort weiter in der Funktion und führt das return aus?  
  
Genau. Das ist so, als wenn du dem Chef ein Bestellformular zum Gegenzeichnen hinlegst. Natürlich kannst du daneben stehenbleiben und warten, bis er unterschrieben hat (->synchroner Request), aber das ist nicht der Normalfall. Normal ist wohl eher, dass du erstmal wieder mit dem Tagesgeschäft weitermachst, und Cheffe (oder Sekretärin) kommt irgendwann vorbei und legt dir den unterschriebenen Zettel auf den Tisch.  
Deine Funktion getDataFromSQL() ist nun so gestrickt, dass sie \*gar kein Ergebnis\* liefert. Sie sendet den Request und kehrt dann sofort wieder zurück. Aber sie merkt sich vor, dass eine anonyme Funktion (nämlich der Handler für onreadystatechange) aufzurufen ist, sobald sich irgendwas ändert, z.B. die Antwort vom Server eingetroffen ist. Das kann aber durchaus erst Sekunden später sein.  
  
Also nochmal zum Verständnis:  
 \* Erst Request senden und eine Handlerfunktion in onreadystatechange hinterlegen  
 \* Weitermachen mit dem Programmablauf, soweit das ohne die Server-Antwort möglich ist  
 \* Wenn der onreadystatechange-Handler aufgerufen wird und readyState=4 ist, kannst  
   du die Antwort verarbeiten  
  
Klar soweit?  
  
So long,  
 Martin  

-- 
Wenn zwei dasselbe tun, sind sie vielleicht bald zu dritt.