AJAX - XMLHttpRequest
- Forrige side AJAX XMLHttp
- Næste side AJAX respons
XMLHttpRequest-objektet bruges til at udveksle data med serveren.
Send anmodning til serveren
Hvis du vil sende en anmodning til serveren, bruger vi XMLHttpRequest-objektets open()
og send()
Metode:
xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
metode | beskrivelse |
---|---|
open(method, url, async) |
Regler anmodningstypen
|
send() | Send anmodning til serveren (brugt til GET) |
send(string) | Send anmodning til serveren (brugt til POST) |
GET eller POST?
GET er enklere og hurtigere end POST og kan bruges i de fleste tilfælde.
Men brug altid POST i følgende situationer:
- Cache-filer er ikke en mulighed (opdater filer eller databaser på serveren)
- Send store mængder data til serveren (POST har ingen størrelsesbegrænsning)
- Send brugerinput (kan indeholde ukendte tegn), POST er mere kraftfuld og sikker
GET-anmodning
En simpel GET-anmodning:
Eksempel
xhttp.open("GET", "demo_get.asp", true); xhttp.send();
I de ovennævnte eksempler kan du muligvis få et cache-resultat. For at undgå dette skal du tilføje en unik ID til URL'en:
Eksempel
xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true); xhttp.send();
Hvis du skal sende information med GET-metoden, skal du tilføje disse oplysninger til URL'en:
Eksempel
xhttp.open("GET", "demo_get2.asp?fname=Bill&lname=Gates", true); xhttp.send();
POST-anmodning
En simpel POST-anmodning:
Eksempel
xhttp.open("POST", "demo_post.asp", true); xhttp.send();
Hvis du vil POSTe data som en HTML-formular, skal du bruge: setRequestHeader()
Tilføj en HTTP-hoved send()
Metoden specificerer de data, du skal sende:
Eksempel
xhttp.open("POST", "ajax_test.asp", true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send("fname=Bill&lname=Gates");
metode | beskrivelse |
---|---|
setRequestHeader(header, value) |
Tilføj HTTP-header til forespørgslen
|
url - filen på serveren
open() metoden url parametren er adressen på filen på serveren:
xhttp.open("GET", "ajax_test.asp", true);
Filen kan være af enhver type, såsom .txt og .xml, eller server scripts som .asp og .php (de kan udføre operationer på serveren, før svaret sendes tilbage).
Asynkron - true eller false?
Hvis du vil sende en forespørgsel asynkront:open()
metoden async parametren skal sættes til true
:
xhttp.open("GET", "ajax_test.asp", true);
At sende asynkrone forespørgsler er en stor fremskridt for webudviklere. Mange opgaver, der udføres på serveren, tager meget tid. Før AJAX kunne dette føre til, at applikationen fryser eller stopper.
Gennem asynkron sendelse behøver JavaScript ikke at vente på serverens svar, men kan i stedet:
- Udfør anden skript, mens du venter på serverens svar
- Behandle svar, når svaret er klar
onreadystatechange-egenskaben
Gennem XMLHttpRequest-objektet kan du definere en funktion, der skal udføres, når en forespørgsel modtager et svar.
Denne funktion udføres i XMLHttpResponse-objektets onreadystatechange
defineret i egenskaben:
Eksempel
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 vil lære mere om onreadystatechange i senere kapitler.
synkron forespørgsel
Hvis du vil udføre en synkron forespørgsel, skal du sætte open()
den tredje parameter i metoden sættes til false
:
xhttp.open("GET", "ajax_info.txt", false);
Async = false bruges nogle gange til hurtige tests. Du vil også se synkrone anmodninger i ældre JavaScript-kode.
Da koden venter på, at serveren er færdig, er der ikke brug for en onreadystatechange-funktion:
Eksempel
xhttp.open("GET", "ajax_info.txt", false); xhttp.send(); document.getElementById("demo").innerHTML = xhttp.responseText;
Vi anbefaler ikke synkrone XMLHttpRequests (async = false), fordi JavaScript vil stoppe med at udføre, indtil serveren er klar med svar. Hvis serveren er travl eller langsom, kan applikationen fryse eller stoppe.
Synkrone XMLHttpRequests fjernes fra webstandarder, men processen kan tage mange år.
Moderne udviklingsværktøjer opfordres til at give advarsler om brug af synkrone anmodninger, og når dette sker, kan der kastes en InvalidAccessError-undtagelse.
- Forrige side AJAX XMLHttp
- Næste side AJAX respons