ugrás a tartalomhoz

Egy (szerintem egyszerű) ajax kérdés

avus · 2007. Jún. 19. (K), 14.24
A következő problémára keresem a választ:
ajax_fuggveny = function(a)
{
	ajax = new Ajax.Request(
		'valami.php?a=' + a
	);

	...
}
A meghívott php visszaküld valami választ, ezt szeretném
visszaadni a függvényből egy return-nal.
Arra rájöttem, hogy az ajax.transport.responseText a válasz,
de simán a

return ajax.transport.responseText;

nem működik, ugyanis akkor még az ajax.transport.readyState
rtéke 1.

Ha kiteszek egy alert(1)-et a return elé, akkor már azt
téríti vissza, amit kapni szeretnék.

Próbáltam egy

while (ajax.transport.readyState < 4);

sorral várakoztatni, végtelen ciklusba került.

Tehát a kérdés: mit tegyek a ... helyére, hogy addig várakozzon a
függvényem, amíg a readyState értéke 4, és csak akkor
adja vissza a php válaszát?
 
1

doksi példa

gex · 2007. Jún. 19. (K), 14.45
ha minden igaz, ez prototype, annak pedig van egy dokumentációja, ahol elég jól bemutatják az Ajax.Request használatát.
nem az a megoldás, hogy várakoztatod a js futását, hanem hogy sikeres kérés után meghívsz egy függvényt. ettől lesz aszinkron az ajax, hogy nem kell várni az eredményre, hanem ha megjön a válasz akkor csinálsz valamit (közben pedig nem tartod fel a böngészőt).
2

Köszi

avus · 2007. Jún. 19. (K), 15.10
Köszi, segített amit írtál, egy "asynchronous: false"-t kellett betennem az options részbe. Mondjuk nem ajánlják, és lehet hogy az ajax alapból nem erre való, de itt ehhez a problémához szerintem ez a megoldás kell nekem.
3

magyar verzió

breakline · 2007. Jún. 19. (K), 15.17
Szia

Itt találsz egy elég jó prototype leírást magyarul, ajax-al is foglalkozik:

http://prototype.rajmi.hu/prototype.js.hu.html

üdv
BL
4

"lefagy a böngésző"

Jano · 2007. Jún. 19. (K), 15.21
Igen, szinkron esetben lényegében olyan mintha lefagyna a böngésző. Nem tudsz addig semmi mást csinálni. Nem túl felhasználóbarát, próbáld inkább a kódodat átalakítani.
5

idézz többet

ferenczcsibi · 2007. Jún. 19. (K), 17.38
a readyStateChangre milyen függvény van ráakasztva és hol? Az ajax változó látszik a függvényen kívülről?
A state-et elvileg így érdemes figyelni: if (ajax.transport.readyState != 4) { return; } else {..}
6

Erre általában nincs szükség, elrejti használt rendszer

Jano · 2007. Jún. 19. (K), 19.52
Biztos valami kész js könyvtárat használ, így ennek a figyelésére szerintem nincsen szüksége, azt elrejti előle a használt Ajax-ozo cucc.