XML DOM - XMLHttpRequest-objekti

XMLHttpRequest-objekti

XMLHttpRequest-objekti tarjoaa täyden pääsyn HTTP-protokollaan, mukaan lukien kyky tehdä POST- ja HEAD-pyynnöt sekä tavalliset GET-pyynnöt. XMLHttpRequest voi palauttaa web-palvelimen vastauksen synkronisesti tai asynkronisesti ja voi palauttaa sisällön tekstinä tai DOM-dokumenttina.

Vaikka se on nimeltään XMLHttpRequest, se ei ole rajoitettu XML-dokumenttien käyttöön: se voi vastaanottaa minkä tahansa muodon tekstdokumentin.

XMLHttpRequest-objekti on nimeltään AJAX Web-sovelluksen arkkitehtuurin yksi keskeinen toiminto.

selaimen tuki

XMLHttpRequest saa hyvää tukea kaikilta nykymuovilta. Ainoa selaimen riippuvuus liittyy XMLHttpRequest-olion luomiseen. IE 5 ja IE 6:ssa on käytettävä IE:lle erityistä ActiveXObject()-rakennusfuncionia. Kuten XMLHttpRequest-objekti Tämä luku esittelee.

W3C-standardointi

XMLHttpRequest-objekti ei ole standardoitu, mutta W3C on aloittanut standardointityön, ja tämä oppikirja sisältää standardointityön luonnoksia.

Nykyinen XMLHttpRequest-Implementaatio on melko yhtenäinen. Mutta on pieniä eroja standardiin nähden. Esimerkiksi, jokin Implementaatio voi palauttaa null, kun standardissa vaaditaan tyhjää merkkijonoa, tai Implementaatio voi asettaa readyState-arvon 3 ilman, että taataan, että kaikki vastausotsikot ovat saatavilla.

Ominaisuus

readyState

HTTP-pyynnön tila. Kun XMLHttpRequest luodaan ensimmäistä kertaa, tämän ominaisuuden arvo on 0, ja se kasvaa saavutettuaan täyden HTTP-vastauksen.

Jokaisella viidestä tilasta on liittyvä epävirallinen nimi. Taulukossa luetellaan tila, nimi ja merkitys:

Tila Nimi Kuvaus
0 Uninitialized Alustustila. XMLHttpRequest-objekti on luotu tai on abort() -menetelmän kautta palautettu.
1 Open open() -menetelmä on kutsuttu, mutta send() -menetelmää ei ole kutsuttu. Pyyntö ei ole vielä lähetetty.
2 Sent Send() -menetelmä on kutsuttu, HTTP-pyyntö on lähetetty Web-palvelimelle. Vastaus ei ole vastaanotettu.
3 Receiving Kaikki vastausotsikot on vastaanotettu. Vastauskehyksen vastaanotto on aloitettu mutta ei vielä valmis.
4 Loaded HTTP-vastaus on täysin vastaanotettu.

readyState-arvo ei putoa, ellei abort() tai open() -menetelmää kutsuta pyynnin käsittelyn aikana. Jokaisella kerralla, kun tämän ominaisuuden arvo kasvaa, onreadystatechange-tapahtumankäsittelijä kutsutaan.

responseText

Tähän asti palvelimelle vastaanotettu vastauskehyksen sisältö (ei sisällä otsikkoriviä), tai jos tietoja ei ole vielä vastaanotettu, tyhjä merkkijono.

Jos readyState on alle 3, tämä ominaisuus on tyhjä merkkijono. Kun readyState on 3, tämä ominaisuus palauttaa tähän asti vastaanotetun vastausosan. Jos readyState on 4, tämä ominaisuus tallentaa täyden vastauskehyksen.

Jos vastaus sisältää otsikkorivin, joka määrittää vastauskehyksen merkistökoodeksi, käytetään kyseistä koodia. Muussa tapauksessa oletetaan käytetään Unicode UTF-8.

responseXML

Vastauksen pyytämiseen, jäsennetään XML ja käytetään sitä Dokumentti-objektipalauttaa.

status

palauttaa HTTP-tilakoodi,kuten 200 tarkoittaa onnistumista, ja 404 tarkoittaa "Ei löydy"-virheen.

statusText

Tämä ominaisuus määrittää pyynnön HTTP-tilakoodin nimellä eikä numerolla. Esimerkiksi, kun tila on 200, se on "OK", kun tila on 404, se on "Ei löydy". Kuten status-ominaisuudessa, lukeminen tätä ominaisuutta readyState:n ollessa alle 3 aiheuttaa poikkeuksen.

Tapahtumankäsittelijä

onreadystatechange

Kutsutaan tapahtumankäsittelijäfunktion joka kutsutaan aina, kun readyState-ominaisuus muuttuu. Kun readyState on 3, sitä voidaan kutsua useita kertoja.

Metodi

abort()

Peruuta nykyinen vastaus, sulje yhteys ja lopeta kaikki ratkaisemattomat verkkotoiminnot.

Tämä metodi palauttaa XMLHttpRequest-objektin tilan readyState:ksi 0 ja peruuttaa kaikki ratkaisemattomat verkkotoiminnot. Esimerkiksi, jos pyyntö kestää liian kauan ja vastaus ei ole enää tarpeen, voit kutsua tätä metodia.

getAllResponseHeaders()

Palauta HTTP-vastausotsikot suhteellisesti käsittelemättömänä merkkijonona.

Jos readyState on alle 3, tämä metodi palauttaa null. Muussa tapauksessa se palauttaa kaikki palvelimen lähettämät HTTP-vastausotsikot. Otsikot palautetaan yhtenäisenä merkkijonona, rivi kerrallaan. Jokainen rivi erotetaan rivinvaihdolla "\r\n".

getResponseHeader()

Palauta määritetyn HTTP-vastausotsikon arvo. Parametrina on palautettava HTTP-vastausotsikon nimi. Voit käyttää mitä tahansa kirjaintyyppiä määrittääksesi otsikon, ja vertailussa ei erota suuret ja pienet kirjaimet.

Tämän metodin palauttama arvo on määritetyn HTTP-vastausotsikon arvo. Jos tätä otsikkoa ei ole vastaanotettu tai readyState on alle 3, palautetaan tyhjiä merkkejä. Jos vastaanotetaan useita määritettyjä otsikoita, näiden arvot yhdistetään ja palautetaan, erottuen toisistaan pilkulla ja välilyönnillä.

open()

Alustaa HTTP-pyyntöparametrit, kuten URL ja HTTP-metodi, mutta ei lähetä pyyntöä.

send()

Lähetä HTTP-pyyntö käyttäen open() metodille annettuja parametreja sekä metodille annettua valinnaisia pyyntökehhoa.

setRequestHeader()

Aseta tai lisää HTTP-pyyntö avoimeen mutta lähettämättömään pyyntöön.

XMLHttpRequest.open()

Alusta HTTP-pyyntöparametrit

Syntaksi

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

Method-parametri on HTTP-menetelmä, jota käytetään pyyntöön. Arvot sisältävät GET, POST ja HEAD.

URL-parametri on pyynnön pääasiallinen osa. Useimmat selaimet toteuttavat samansijaisuusstrategian ja vaativat, että tämä URL on samalla isännällä ja portilla kuin skriptin sisältävä teksti.

Async-parametri viittaa siihen, että pyyntö suoritetaan asynkronisesti. Jos tämä parametri on false, pyyntö on synkroninen, ja send() -menetelmän seuraavat kutsut estävät, kunnes vastaus on täysin vastaanotettu. Jos tämä parametri on true tai jätetään pois, pyyntö on asynkroninen ja yleensä tarvitsee onreadystatechange-tilannepalautuslausekkeen.

Käyttäjätunnus- ja salasana-parametrit ovat valinnaisia ja tarjoavat todennuslippuja URL:lle tarvittavaa käyttöoikeutta. Jos ne määritetään, ne korvaavat URL:llä määritellyt kaikki muut käyttöoikeudet.

Selitys

Tämä menetelmä alustaa pyyntöparametrit, jotka on tarkoitettu käytettäväksi send() -menetelmässä myöhemmin. Se asettaa readyState-arvon 1, poistaa kaikki aiemmin määritellyt pyyntö- ja vastausheaderit sekä asettaa responseText, responseXML, status ja statusText-parametrit niiden oletusarvoihin. Tämä menetelmä on turvallinen kutsua, kun readyState on 0 (kun XMLHttpRequest-objekti on luotu tai abort() -menetelmä on kutsuttu) sekä kun readyState on 4 (kun vastaus on vastaanotettu). Kun menetelmää kutsutaan muiden tilojen yhteydessä, open() -menetelmän käyttäytyminen on määritelty.

Paitsi tallentaakseen pyyntöparametrit, jotka ovat käytettävissä send() -menetelmässä, sekä asettaakseen XMLHttpRequest-objektin uudelleenkäyttöä varten, open() -menetelmällä ei ole muita toimintoja. On huomattava, että tämän menetelmän kutsun yhteydessä toteutus ei yleensä avaa verkkoyhteyttä Web-palvelimeen.

XMLHttpRequest.send()

Lähetä HTTP-pyyntö

Syntaksi

send(body)

Jos HTTP-menetelmä, joka määritetään kutsulla open(), on POST tai PUT, body-parametri määrittää pyyntökehon, joka voi olla merkkijono tai Dokumentti-objektiJos pyyntökehon ei ole välttämätön, tämä parametri on null. Kaikissa muissa menetelmissä parametri ei ole käytettävissä ja sen tulisi olla null (jotkut toteutukset eivät salli parametrin jättämistä pois).

Selitys

Tämä menetelmä lähettää HTTP-pyynnön. Jos open() -menetelmää ei ole kutsuttu aiemmin, tai toisin sanoen, jos readyState ei ole 1, send() heittää poikkeuksen. Muussa tapauksessa se lähettää HTTP-pyynnön, joka koostuu seuraavista osista:

  • Aiemmin kutsutun open() -menetelmän määrittelemät HTTP-menetelmä, URL ja todennustiedot (jos niitä on).
  • Aiemmin kutsutun setRequestHeader() -menetelmän määrittelemät pyyntöotsikkotiedot (jos niitä on).
  • Lähetetään tähän menetelmään body Parametrit.

Kun pyyntö on julkaistu, send() asettaa readyState-arvon 2 ja laukaisee onreadystatechange- tapahtumankäsittelijän.

Jos aikaisemmin kutsutun open() -parametrin async on false, tämä menetelmä estää suorituksen eikä palauta arvoa, kunnes readyState on 4 ja palvelimen vastaus on täysin vastaanotettu. Muussa tapauksessa, jos async-parametrin arvo on true tai parametrin arvoa ei ole määritelty, send() palauttaa välittömästi ja kuten seuraavassa kuvataan, palvelinvastaus käsitellään taustaprosessissa.

Jos palvelinvastaus sisältää HTTP-uudelleenohjauksen, send() -menetelmä tai taustaprosessi seuraa automaattisesti uudelleenohjausta. Kun kaikki HTTP-vastausotsikkotiedot on vastaanotettu, send() tai taustaprosessi asettaa readyState-arvon 3 ja laukaisee onreadystatechange- tapahtumankäsittelijän. Jos vastaus on pitkä, send() tai taustaprosessi voi laukaista onreadystatechange- tapahtumankäsittelijän tilassa 3: Tämä voidaan käyttää latausprosessin indikaattorina. Lopuksi, kun vastaus on valmis, send() tai taustaprosessi asettaa readyState-arvon 4 ja laukaisee tapahtumankäsittelijän viimeisen kerran.

XMLHttpRequest.setRequestHeader()

Syntaksi

setRequestHeader(name, value)

name-parametrin on oltava asetettavan otsikkotietueen nimi. Tämä parametri ei saa sisältää välilyöntejä, kolonointia tai rivinvaihtoja.

value-parametrin on oltava otsikkotietueen arvo. Tämä parametri ei saa sisältää rivinvaihtoja.

Selitys

setRequestHeader() -menetelmä määrittelee HTTP-reqeestin otsikkotietueen, joka tulisi sisällyttää lähettämäänin send() -kutsuun. Tätä menetelmää voidaan kutsua vain, kun readyState on 1, esimerkiksi open() -kutsun jälkeen, mutta ennen send() -kutsua.

Jos määritelty niminen otsikkotietue on jo määritelty, tämän otsikkotietueen uusi arvo on: aikaisemmin määritelty arvo, sekä pilkku, välilyönti ja tässä kutsussa määritelty arvo.

Jos open() -kutsu määrittää todennustiedot, XMLHttpRequest lähettää automaattisesti sopivan Authorization-pyyntöjen otsikkorivin. Voit kuitenkin käyttää setRequestHeader() -menetelmää lisätäksesi tämän otsikkorivin. Samoin, jos verkkoserveri on tallentanut ja välittänyt open() -kutsussa annetun URL:än kanssa liittyvän cookien, sopivat Cookie- tai Cookie2-otsikkorivit sisältyvät automaattisesti pyyntöön. Voit lisätä nämä cookit otsikkoriviin kutsumalla setRequestHeader() -menetelmää. XMLHttpRequest voi myös tarjota User-Agent-otsikkoriville oletusarvon. Jos se tekee niin, kaikki sinulle määrittämäsi arvot lisätään tämän oletusarvon perään.

Jotkut pyyntöjen otsikkorivit asetetaan automaattisesti XMLHttpRequest:n toimesta eikä tällä metodilla, jotta ne vastaavat HTTP-protokollaa. Tämä sisältää seuraavat välittäjän kanssa liittyvät otsikkorivit:

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