XML DOM - XMLHttpRequest-object

XMLHttpRequest Object

Het XMLHttpRequest-object biedt volledige toegang tot het HTTP-protocol, inclusief het kunnen doen van POST- en HEAD-verzoeken en reguliere GET-verzoeken. XMLHttpRequest kan synchroon of asynchroon de reactie van de webserver terugkrijgen en kan inhoud retourneren in de vorm van tekst of een DOM-document.

Hoewel het de naam XMLHttpRequest draagt, is het niet beperkt tot het gebruiken met XML-documenten: het kan elke vorm van tekstdocument ontvangen.

het XMLHttpRequest-object heet AJAX is een cruciale functie van de architectuur van Web-applicaties.

browserondersteuning

XMLHttpRequest wordt goed ondersteund door alle moderne browsers. De enige browserafhankelijkheid is de creatie van het XMLHttpRequest-object. In IE 5 en IE 6 moet de specifieke IE ActiveXObject() constructor worden gebruikt. Zoals in XMLHttpRequest Object Wat in dit hoofdstuk wordt besproken.

W3C-normalisatie

Het XMLHttpRequest-object is nog niet genormaliseerd, maar de W3C heeft al werk begonnen aan de normalisatie. Het in dit handboek beschreven materiaal is gebaseerd op de werkversie van de normalisatie.

De huidige XMLHttpRequest-implementatie is redelijk consistent. Maar er zijn subtiële verschillen met de standaard. Bijvoorbeeld, een implementatie kan null retourneren, terwijl de standaard een lege string vereist, of een implementatie kan readyState instellen op 3 zonder te garanderen dat alle responsekoppen beschikbaar zijn.

Eigenschap

readyState

De status van de HTTP-aanvraag. Wanneer een XMLHttpRequest voor het eerst wordt gemaakt, begint de waarde van dit eigenschap bij 0 en stijgt tot 4 totdat een volledige HTTP-respons is ontvangen.

Elke van de 5 staten heeft een gerelateerde informele naam. De tabel hieronder geeft de status, naam en betekenis weer:

Status Naam Beschrijving
0 Ongeïnitialiseerd Initiële status. De XMLHttpRequest-object is gemaakt of is door de abort() methode gereset.
1 Open De open() methode is aangeroepen, maar de send() methode is nog niet aangeroepen. De aanvraag is nog niet verzonden.
2 Verzonden De Send() methode is aangeroepen, de HTTP-aanvraag is verzonden naar de webserver. Er is geen respons ontvangen.
3 Ontvangen Alle responsekoppen zijn ontvangen. De responsbody begint te ontvangen maar is nog niet voltooid.
4 Geladen De HTTP-respons is volledig ontvangen.

De waarde van readyState zal niet dalen, tenzij abort() of open() wordt aangeroepen tijdens het verwerken van een verzoek. Elke keer dat de waarde van dit eigenschap toeneemt, wordt het onreadystatechange-evenement aangeroepen.

responseText

Tot nu toe ontvangen responsbody (exclusief koppen), of een lege string als er nog geen gegevens zijn ontvangen.

Als de readyState kleiner is dan 3, is dit eigenschap een lege string. Als de readyState 3 is, retourneert dit eigenschap het tot nu toe ontvangen deel van de respons. Als de readyState 4 is, wordt het volledige responsbody opgeslagen in dit eigenschap.

Als de respons een kopje bevat met de aangegeven karakterencoding voor de responsbody, wordt die encoding gebruikt. Anders wordt aangenomen dat Unicode UTF-8 wordt gebruikt.

responseXML

De respons op de aanvraag, geïnterpreteerd als XML en als Document objectterug.

status

teruggegeven door HTTP-statuscode,zoals 200 betekent succes en 404 betekent "Not Found"-fout. Het lezen van deze eigenschap bij readyState kleiner dan 3 kan leiden tot een uitzondering.

statusText

Deze eigenschap specificeert de HTTP-statuscode van de verzoek door naam in plaats van door nummer. Bijvoorbeeld, als de status 200 is, is het "OK", en als de status 404 is, is het "Not Found". Net als de status-eigenschap kan het lezen van deze eigenschap bij readyState kleiner dan 3 leiden tot een uitzondering.

Eventhandler

onreadystatechange

Eventhandler die wordt aangeroepen bij elke verandering van het readyState-eigenschap. Wanneer readyState 3 is, kan het ook meerdere keren worden aangeroepen.

Methode

abort()

Annuleer de huidige respons, sluit de verbinding en beëindig alle lopende netwerkactiviteiten.

Deze methode reset het XMLHttpRequest-object naar een staat van readyState 0 en annuleert alle lopende netwerkactiviteiten. Bijvoorbeeld, als een verzoek te lang duurt en de respons niet langer nodig is, kan deze methode worden aangeroepen.

getAllResponseHeaders()

Retourneer de HTTP-verzoeksheaders als ongeslepen string.

Als de readyState kleiner is dan 3, retourneert deze methode null. Anders retourneert het alle HTTP-headers die door de server zijn verzonden. De headers worden als een enkele string geretourneerd, met een regel per header. Elke regel wordt gescheiden door een newline-teken "\r\n".

getResponseHeader()

Retourneer de waarde van de opgegeven HTTP-verzoeksheader. De parameter is de naam van de te retourneren HTTP-verzoeksheader. Het is toegestaan om elke hoofdlettergebruik te specificeren, en de vergelijking met de verzoeksheader is niet hoofdlettergevoelig.

De waarde van de retourwaarde van deze methode is de waarde van de opgegeven HTTP-verzoeksheader, leeg als deze header niet is ontvangen of als de readyState kleiner is dan 3. Als er meerdere headers met dezelfde naam zijn ontvangen, worden de waarden van deze headers aan elkaar gekoppeld en geretourneerd, gescheiden door komma's en spaties.

open()

Initialiseer de HTTP-verzoekparameters, zoals URL en HTTP-methode, maar verzend geen verzoek.

send()

Verzend een HTTP-verzoek, gebruikmakend van de parameters doorgegeven aan de open() methode, alsmede het optionele verzoeksbody dat aan deze methode wordt doorgegeven.

setRequestHeader()

Stel een HTTP-verzoek in of voeg er een toe aan een geopend maar nog niet verzonden verzoek.

XMLHttpRequest.open()

Initialiseer HTTP request parameters

Syntaxis

open(method, url, async, username, password)

De parameter method is de HTTP-methode die wordt gebruikt voor de request. De waarden zijn GET, POST en HEAD.

De parameter url is het subject van de request. De meeste browsers voeren een same-origin security policy uit en vereisen dat deze URL dezelfde hostnaam en poort heeft als de tekst die de script bevat.

De parameter async geeft aan dat de request asynchrone uitvoering moet gebruiken. Als deze parameter false is, is de request synchroon en blokkeert elke aanroep van send() totdat de respons volledig is ontvangen. Als deze parameter true is of wordt overgeslagen, is de request asynchrone en heeft deze meestal een onreadystatechange event handler nodig.

De parameters username en password zijn optioneel en bieden authenticatiekwalificatie voor de autorisatie die nodig is voor de url. Als deze worden gespecificeerd, worden ze de door de url zelf gespecificeerde kwalificaties overgeslagen.

Verklaring

Deze methode initialiseert de request parameters voor gebruik door de send() methode later. Het stelt de readyState in op 1, verwijdert alle eerder gespecificeerde request headers en alle eerder ontvangen response headers, en stelt de parameters responseText, responseXML, status en statusText in op hun standaardwaarden. Dit is veilig om aan te roepen wanneer de readyState 0 is (wanneer het XMLHttpRequest-object net is gemaakt of de abort() methode is aangeroepen) en wanneer de readyState 4 is (wanneer de respons is ontvangen). Wanneer deze methode wordt aangeroepen voor elke andere status, is het gedrag van de open() methode vooraf bepaald.

Behalve om de request parameters op te slaan voor gebruik door de send() methode en om de XMLHttpRequest-object te hergebruiken door deze te herstellen, heeft de open() methode geen andere gedragingen. Het moet worden opgemerkt dat wanneer deze methode wordt aangeroepen, de implementatie normaal gesproken geen verbinding maakt met een webserver.

XMLHttpRequest.send()

Verstuur een HTTP-verzoek

Syntaxis

send(body)

Als de HTTP-methode die wordt gespecificeerd door het aanroepen van open() POST of PUT is, wordt de body parameter gespecificeerd als de request body, als een string of Document objectAls de request body niet nodig is, is deze parameter null. Voor alle andere methoden is deze parameter niet beschikbaar en moet deze null zijn (sommige implementaties laten dit niet toe om de parameter te overslaan).

Verklaring

Deze methode leidt tot het verzenden van een HTTP-verzoek. Als er eerder geen open() is aangeroepen, of om preciezer te zijn, als de readyState niet 1 is, gooit send() een uitzondering. Anders stuurt het een HTTP-verzoek, dat bestaat uit de volgende onderdelen:

  • De HTTP-methode, URL en authenticatiegegevens die zijn gespecificeerd bij de vorige aanroep van open() (indien aanwezig).
  • De verzoekheader die is gespecificeerd bij de vorige aanroep van setRequestHeader() (indien aanwezig).
  • Doorgegeven aan deze methode Body Parameters.

Zodra het verzoek is uitgegeven, stelt send() de readyState in op 2 en activeert de onreadystatechange-eventhandler.

Als de parameter async van de eerder aangeroepen open() false is, blokkeert deze methode en keert niet terug, totdat de readyState 4 is en de reactie van de server volledig is ontvangen. Anders, als de parameter async true is, of deze parameter wordt weggelaten, keert send() onmiddellijk terug en, zoals later wordt uitgelegd, wordt de serverreactie in een achtergrondthread verwerkt.

Als de serverreactie een HTTP-omleiding bevat, volgt de methode send() of een achtergrondthread automatisch de omleiding. Wanneer alle HTTP-reactieheaders zijn ontvangen, stelt send() of een achtergrondthread de readyState in op 3 en activeert de onreadystatechange-eventhandler. Als de reactie lang is, kan send() of een achtergrondthread de onreadystatechange-eventhandler in de staat 3 activeren: dit kan dienen als een downloadvoorwaarteken. Ten slotte, wanneer de reactie is voltooid, stelt send() of een achtergrondthread de readyState in op 4 en activeert de eventhandler voor het laatst.

XMLHttpRequest.setRequestHeader()

Syntaxis

setRequestHeader(name, value)

De parameter name is de naam van de te instellen header. Deze parameter mag geen spaties, punten of nieuwe regels bevatten.

De parameter value is de waarde van de header. Deze parameter mag geen nieuwe regels bevatten.

Verklaring

De methode setRequestHeader() specificeert een HTTP-header van een HTTP-verzoek, die moet worden opgenomen in de verzoek die wordt uitgegeven via een latere send()-aanroep. Deze methode kan alleen worden aangeroepen wanneer de readyState 1 is, bijvoorbeeld, na het aanroepen van open(), maar voordat send() wordt aangeroepen.

Als de header met de opgegeven naam al is ingesteld, is de nieuwe waarde van deze header: de eerder opgegeven waarde, gevolgd door een komma, een spatie en de waarde die door deze aanroep is opgegeven.

If the open() call specifies credentials, XMLHttpRequest automatically sends an appropriate Authorization request header. However, you can use setRequestHeader() to add this header. Similarly, if the web server has already saved and transmitted a cookie associated with the URL passed to open(), the appropriate Cookie or Cookie2 header is also automatically included in the request. These cookies can be added to the header by calling setRequestHeader(). XMLHttpRequest can also provide a default value for the User-Agent header. If it does, any value you specify for this header will be added to the end of this default value.

Some request headers are set automatically by XMLHttpRequest instead of this method to comply with the HTTP protocol. This includes the following headers related to proxies:

  • Host
  • Connection
  • Keep-Alive
  • Accept-charset
  • Accept-Encoding
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • Range