Ajde ovako.
Kod sinhronog zahteva skripta (js) čeka da se odziv(response) sa servera vrati pa onda nastavlja sa izvršenjem skripte. A dok kod asinhronog zahteva skripta ne čeka odziv već nastavlja sa radom, dakle kada pozoveš metod send() šalje se zahtev, skripta neće čekati da se vrati response već će nastaviti dalje da se izvršava, u mom primeru gore, nastaviće sa otvaranjem nove konekcije, i tu je nastao problem i FF nije radio, pa je potrebno da se napravi pauza između izvršenja funkcije dakle čekati da se vrati odziv, odnosno tačnije da se završi prvi zahtev.
E sada, da bi znali kod asinhronog zahteva da se vratio odziv, odnosno dokle je stigao, koristi se readyState, i on vraća vrednosti od 0 do 4, a takođe koristi se i event readystatechange (onreadystatechange) kako bi se skripti reklo šta da radi kada se odziv vrati (tačnije kada se promeni readyState), odnosno definiše se funkcija koja će biti pokrenuta.
Kod sinhronog zahteva ti posle poziva send() u sledećem redu (posle završetka zahteva) dobijaš responseText/responseXML, skripta će sačekati da se vrati odziv, pa ti readyState i onreadystatechange praktično nisu ni potreban.
Nadam se da ti je sada malo jasnije.
Možda je bolje da ukoliko koristiš asinhroni prenos i pritom ti je potrebno slanje više zahteva, za svaki zahtev ponovno kreirati XMLHttpRequest objekat, primeri koje su @jablan i @dr ZiDoo dali.
EDIT:
da bi testirao šta vraća readyState probaj npr. ovo.
Code:
req = getRequestObject();
alert(req.readyState);
req.open('GET', 'test1.txt', false);
alert(req.readyState);
req.send(null);
alert(req.readyState);
[Ovu poruku je menjao Br@nkoR dana 20.03.2006. u 11:39 GMT+1]
[Ovu poruku je menjao Br@nkoR dana 20.04.2006. u 18:27 GMT+1]
Banned - Not available