AJAX - XMLHttpRequest
- Föregående sida AJAX XMLHttp
- Nästa sida AJAX-svar
XMLHttpRequest-objektet används för att utbyta data med servern.
Skicka förfrågan till servern
För att skicka förfrågan till servern använder vi XMLHttpRequest-objektets open()
och send()
Metod:
xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
metod | beskrivning |
---|---|
open(method, url, async) |
Bestäm förfrågans typ
|
send() | Skicka förfrågan till servern (används för GET) |
send(string) | Skicka förfrågan till servern (används för POST) |
GET eller POST?
GET är enklare och snabbare än POST och kan användas i de flesta fall.
Men använd alltid POST i följande fall:
- Cache-filer är inte ett alternativ (uppdatera filer eller databaser på servern)
- Skicka stora mängder data till servern (POST har ingen storleksbegränsning)
- Skicka användarinput (kan innehålla okända tecken), POST är kraftfullare och säkrare än GET
GET-förfrågan
En enkel GET-förfrågan:
Exempel
xhttp.open("GET", "demo_get.asp", true); xhttp.send();
I de ovanstående exemplen kan du få ett cachat resultat. För att undvika detta, lägg till en unik ID till URL:en:
Exempel
xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true); xhttp.send();
Om du behöver skicka information med GET-metoden, lägg till dessa informationer till URL:en:
Exempel
xhttp.open("GET", "demo_get2.asp?fname=Bill&lname=Gates", true); xhttp.send();
POST-förfrågan
En enkel POST-förfrågan:
Exempel
xhttp.open("POST", "demo_post.asp", true); xhttp.send();
Om du vill POST data som ett HTML-formulär, använd setRequestHeader()
Lägg till en HTTP-huvud. Vänligen använd send()
Metoden specificerar de data som du behöver skicka:
Exempel
xhttp.open("POST", "ajax_test.asp", true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send("fname=Bill&lname=Gates");
metod | beskrivning |
---|---|
setRequestHeader(header, value) |
Lägg till HTTP-header till förfrågan
|
url - filen på servern
open() metoden url parametern är adressen till filen på servern:
xhttp.open("GET", "ajax_test.asp", true);
Filen kan vara av vilket typ som helst, som .txt och .xml, eller server-side skriptfil, som .asp och .php (de kan köra operationer på servern innan de skickar tillbaka ett svar).
Asynkront - true eller false?
För att skicka förfrågningar asynkront:open()
metoden async parametern måste sättas till true
:
xhttp.open("GET", "ajax_test.asp", true);
Att skicka asynkrona förfrågningar är en stor framgång för webbutvecklare. Många operationer som utförs på servern tar mycket tid. Innan AJAX kunde detta orsaka att applikationen fryser eller stannar.
Genom att skicka asynkront behöver JavaScript inte vänta på serverns svar utan kan:
- Kör andra skript medan du väntar på serverns svar
- Hantera svar när det är klart
onreadystatechange-egenskapen
Genom XMLHttpRequest-objektet kan du definiera vilken funktion som ska köras när en förfrågan mottar ett svar.
Denna funktion är i XMLHttpResponse-objektets onreadystatechange
definieras i egenskapen:
Exempel
xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = this.responseText; } }; xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
Du kommer att lära dig mer om onreadystatechange i senare kapitel.
synkrona förfrågningar
För att utföra synkrona förfrågningar, vänligen sätt open()
den tredje parametern i metoden sätts till false
:
xhttp.open("GET", "ajax_info.txt", false);
Async = false används ibland för snabba tester. Du kommer också att se synkrona förfrågningar i äldre JavaScript-kod.
Eftersom koden väntar på att servern ska bli klar behöver du inte en onreadystatechange-funktion:
Exempel
xhttp.open("GET", "ajax_info.txt", false); xhttp.send(); document.getElementById("demo").innerHTML = xhttp.responseText;
Vi rekommenderar inte synkrona XMLHttpRequest (async = false), eftersom JavaScript kommer att stoppa att köra tills svaret från servern är klart. Om servern är upptagen eller långsam kommer applikationen att hänga eller stanna.
Synkrona XMLHttpRequest kommer att tas bort från webbstandarder, men processen kan ta många år.
Moderna utvecklingsverktyg uppmuntras att varna för användning av synkrona förfrågningar och kan kasta InvalidAccessError-undantag när detta inträffar.
- Föregående sida AJAX XMLHttp
- Nästa sida AJAX-svar