ich denke halt so: affe sieht banane. affe steigt auf baum, pflückt banane, schält, isst und geht dann faulenzen weil satt.
Deine Funktion die das Ajax-Request schickt ist "Mensch A", der blubb ist "Kiste", das Ajax-Request ist "Mensch B", "Apfel" ist der Antworttext.
Mensch A befiehlt Mensch B, dass er einen Apfel in die Kiste packen soll. Mensch B geht los.
Mensch A nimmt die Kiste und macht etwas mit dem Inhalt. Da sie leer ist, passiert nichts.
Nun kommt Mensch B mit dem Apfel wieder und legt ihn in die Kiste.
Da Mensch A aber schon fertig ist, - richtig - passiert nichts.
Die onreadystatechange-Funktion ist sowas wie die To-Do-Liste für Mensch B.
Wenn der Status dann 4 ist, hat Mensch B den Apfel und kann damit irgendetwas anstellen.
Jetzt noch eine Funktion zu deklarieren, die dann in der onreadystatechange-Funktion aufgerufen wird, ist in diesem Fall sinnlos, da die onreadystatechange-Funktion genauso gut selbst den Antworttext ausgeben kann.
Asynchron bedeutet in dem Fall halt, dass die Funktion die das Ajax-Request schickt, danach sofort weiter arbeitet.
Wenn du das nicht willst, musst du das Ajax-Request synchron schicken. Dann wartet Mensch A auch auf Mensch B ;)
MfG
bubble