XMLHttpRequest

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 29. syyskuuta 2017 tarkistetusta versiosta . tarkastukset vaativat 14 muokkausta .

XMLHttpRequest (XMLHTTP, XHR) on API , joka on saatavana selaimen komentosarjakielillä , kuten JavaScript . Käyttää HTTP- tai HTTPS -pyyntöjä suoraan verkkopalvelimelle ja lataa palvelimen vastaustiedot suoraan kutsuvaan komentosarjaan. [1] Tiedot voidaan lähettää missä tahansa tekstimuodossa , kuten XML- , HTML- tai JSON -muodossa . Voit tehdä HTTP-pyyntöjä palvelimelle lataamatta sivua uudelleen.

XMLHTTP on tärkeä osa AJAX -tekniikkaa (Asynchronous JavaScript And XML ), jota monet sivustot käyttävät dynaamisten, reagoivien sovellusten luomiseen. Esimerkiksi XMLHTTP:tä käyttävät sivustot, kuten Bing Maps , Gmail , Google Maps , Google Suggest ja Facebook .

XMLHTTP toimii vain tiedostojen kanssa, jotka ovat samassa toimialueessa kuin XMLHTTP:tä käyttävä sivu, mutta siihen on kiertotapa. Kuten JavaScriptin tapauksessa, tämä mahdollisuus ohittaa rajoitus on tehty turvallisuutta ajatellen ( sivustojen välinen komentosarja ).

Vaikka nimi sisältää lyhenteen XML, tekniikka ei aseta rajoituksia lähetettävän tiedon muotoon. Tiedot voidaan lähettää XML-, JSON-, HTML- tai pelkkänä tekstinä. Kehittäjä voi itsenäisesti luoda muodon tiedonsiirtoa varten. Muista kuitenkin, että lähetyksessä käytetään HTTP-tekstiprotokollaa, joten GET-menetelmää käytettäessä tiedot on lähetettävä tekstin muodossa (eli binääridata tulee koodata esim. base64 :ssä ) . POST-menetelmää käytettäessä koodausta ei tarvita.

Historia

Sen kehitti ensin Microsoft , ja se ilmestyi Microsoft Exchange Server 2000 -ohjelmistotuotteen Outlook on the web -komponenttiin. Sen nimi oli IXMLHTTPRequest. Teos liitettiin myöhemmin MSXML 2.0:aan ActiveX -objektina, joka on käytettävissä JScriptin , VBScriptin tai muiden selaimen tukemien komentosarjakielien kautta. MSXML 2.0 sisällytettiin Internet Explorer 5:een.

Mozilla - projektin ohjelmoijat kehittivät sitten yhteensopivan version nimeltä nsIXMLHttpRequest Mozilla 0.6:ssa. Papua käytettiin JavaScript-objektin kautta nimeltä XMLHttpRequest. Täysi toiminnallisuus saavutettiin kuitenkin vain Mozilla 1.0:ssa. Lisätukea XMLHttpRequestille ilmestyi Safari 1.2 :ssa , Opera 8.01:ssä ja muissa.

Viimeisin virallinen spesifikaatio on versio 1.0 ( XMLHttpRequest päivätty 19. joulukuuta 2012), jolla on nykyisen standardin tila (Living Standard) ja versio 2.0 ( XMLHttpRequest Level 2 , päivätty 17. tammikuuta 2012), jonka tila on toimiva. versio. Toinen versio esittelee edistymistapahtumakäsittelijät, tuen verkkotunnusten välisille kyselyille ja työskentelyn binääritietojen kanssa. [2]

XMLHttpRequest Class Methods

Menetelmä Kuvaus
abortti () Peruuttaa nykyisen pyynnön, poistaa kaikki otsikot, asettaa palvelimen vastaustekstin tyhjäksi.
getAllResponseHeaders() Palauttaa täydellisen HTTP-otsikoiden luettelon merkkijonona. Otsikot erotetaan yhdysmerkillä (CR+LF).
Jos virhelippu on tosi, palauttaa tyhjän merkkijonon.
Jos tila on 0 tai 1, se aiheuttaa INVALID_STATE_ERR -virheen.
getResponseHeader(otsikonNimi) Palauttaa määritetyn otsikon arvon.
Jos virhelippu on tosi, palauttaa nollan.
Jos otsikkoa ei löydy, palauttaa null.
Jos tila on 0 tai 1, se aiheuttaa INVALID_STATE_ERR -virheen.
open(menetelmä, URL, async, käyttäjänimi, salasana) Määrittää menetelmän, URL-osoitteen ja muut valinnaiset kyselyparametrit;
asynkroninen parametri määrittää, tehdäänkö työ asynkronisessa tilassa.
Kaksi viimeistä parametria ovat valinnaisia.
lähetä (sisältö) Lähettää pyynnön palvelimelle.
setRequestHeader(tunniste, arvo) Lisää pyyntöön HTTP-otsikon.
overrideMimeType(mimeType) Voit määrittää asiakirjan MIME-tyypin, jos palvelin ei siirtänyt sitä tai siirsi sen väärin.
Huomio : menetelmä ei ole käytettävissä Internet Explorerissa!

XMLHttpRequest-luokan ominaisuudet

Omaisuus Tyyppi Kuvaus
valmiissa tilanmuutoksessa Tapahtumakuuntelija Tapahtumakäsittelijä, joka käynnistyy aina, kun objektin tila muuttuu. Nimi tulee kirjoittaa pienillä kirjaimilla.
readyState allekirjoittamaton lyhyt Objektin nykyinen tila (0 - ei alustettu, 1 - auki, 2 - lähettää tietoja, 3 - vastaanottaa tietoja ja 4 - tiedot ladattu)
vastausteksti DOMString Pyyntöä koskevan vastauksen teksti.
Jos tila ei ole 3 tai 4, palauttaa tyhjän merkkijonon.
vastausXML asiakirja Pyynnön vastauksen teksti XML-muodossa, joka voidaan sitten käsitellä DOM :n kautta .
Jos tila ei ole 4, palauttaa nollan.
Tila allekirjoittamaton lyhyt HTTP-tila numerona ( 404  - "Ei löydy", 200  - "OK" jne.)
statusTeksti DOMString Tila merkkijonona ("Ei löydy", "OK" jne.).
Jos tilaa ei tunnisteta, käyttäjän selaimen pitäisi antaa INVALID_STATE_ERR -virhe.

XMLHttpRequest-luokan aiheuttamat virheet

Nimi Koodi Kuvaus
SECURITY_ERR kahdeksantoista Kutsutaan, kun yritetään tehdä pyyntö, jota käyttäjän selaimen suojausasetukset eivät salli.
NETWORK_ERR 101 Soitto verkkovirheestä (synkronisen pyynnön aikana).
ABORT_ERR 102 Kutsutaan, kun käyttäjä keskeyttää pyynnön (synkronisen pyynnön aikana).

Käyttöesimerkki

Suunnitelma työskennellä XMLHttpRequest-objektin kanssa voidaan esittää seuraavasti:

  1. XMLHttpRequest-objektin luominen
  2. Yhteyden avaaminen
  3. Tapahtumakäsittelijän asettaminen (tulee tehdä avaamisen jälkeen ja ennen lähettämistä IE:hen)
  4. Pyynnön lähettäminen.

XMLHttpRequest-objektin luominen.

Tässä vaiheessa tarvitaan erillinen toteutus eri selaimille. Objektin luomisen rakenne eroaa: IE 5 - IE 6:ssa se toteutetaan ActiveXObjectin kautta ja muissa selaimissa (IE 7 ja uudemmat, Mozilla, Opera, Chrome, Netscape ja Safari) - sisäänrakennetuna XMLHttpRequest-tyypin objektina .

Internet Explorerin aikaisempien versioiden kutsu näyttää tältä [3] :

var req = uusi ActiveXObject ( "Microsoft.XMLHTTP" );

Muissa selaimissa:

var req = uusi XMLHttpRequest ();

Eli varmistaaksesi selainkoodin , sinun tarvitsee vain tarkistaa window.XMLHttpRequest- ja window.ActiveXObject-objektien läsnäolo ja ottaa ne käyttöön riippuen siitä, mikä niistä on.

Universaalina ratkaisuna ehdotetaan seuraavan toiminnon käyttöä:

function createRequestObject () { if ( tyyppi XMLHttpRequest === 'määrittämätön' ) { XMLHttpRequest = function () { yritä { return new ActiveXObject ( "Msxml2.XMLHTTP.6.0" ); } catch ( e ) {} try { return new ActiveXObject ( "Msxml2.XMLHTTP.3.0" ); } catch ( e ) {} try { return new ActiveXObject ( "Msxml2.XMLHTTP" ); } catch ( e ) {} try { return new ActiveXObject ( "Microsoft.XMLHTTP" ); } catch ( e ) {} throw new Error ( "Tämä selain ei tue XMLHttpRequest." ); }; } palauta uusi XMLHttpRequest (); }

Tapahtumakäsittelijän asentaminen, yhteyden avaaminen ja pyyntöjen lähettäminen

Nämä puhelut näyttävät tältä:

req . open ( < "GET" | "POST" | ... > , < url > [, < asyncFlag > [, < user > , < password > ]]); req . onreadystatechange = processReqChange ;

Missä:

  • <"GET"|"POST"|…> —  pyyntömenetelmä . Sallittu: DELETE, GET, HEAD, OPTIONS, POST, PUT.
  • <url>  on pyynnön osoite.
  • <asyncFlag>  on lippu, joka määrittää, käytetäänkö asynkronista pyyntöä. Oletusasetus on tosi.
  • <käyttäjä> , <salasana>  — kirjautumistunnus ja salasana. Tarkoitettu tarvittaessa.

Kun kaikki pyynnön parametrit on määritetty, se on vain lähetettävä. Tämä tehdään käyttämällä send()-menetelmää. Kun lähetät GET-pyynnön versiosta ilman ActiveX:ää, sinun on määritettävä null-parametri, muissa tapauksissa et voi määrittää parametreja. Se ei ole virhe, jos GET-parametri on aina tyhjä:

req . lähetä ( null );

Tämän jälkeen yllä oleva tapahtumakäsittelijä alkaa toimia. Se on itse asiassa ohjelman pääosa. Käsittelijä sieppaa yleensä kaikki mahdolliset pyynnön tilakoodit ja kutsuu tarvittavat toiminnot sekä sieppaa mahdolliset virheet. Esimerkkikoodi näillä kahdella funktiolla:

varreq ; _ funktio loadXMLDoc ( url ) { req = null ; if ( ikkuna . XMLHttpRequest ) { yritä { req = new XMLHttpRequest (); } catch ( e ){} } else if ( ikkuna . ActiveXObject ) { yritä { req = new ActiveXObject ( 'Msxml2.XMLHTTP' ); } catch ( e ){ try { req = new ActiveXObject ( 'Microsoft.XMLHTTP' ); } saalis ( e ){} } } if ( req ) { req . open ( "GET" , url , true ); req . onreadystatechange = processReqChange ; req . lähetä ( null ); } } function processReqChange () { yritä { // Tärkeää! // vain jos tila on "täydellinen" if ( req . readyState == 4 ) { // tilalle "OK" if ( req . status == 200 ) { // prosessoi vastaus } else { alert ( "Tietojen haku epäonnistui" : \n" + req . statusText ); } } } catch ( e ) { // alert('Virhe: ' + e. kuvaus); // Bugzilla Bug 238559 XMLHttpRequest tarvitsee tavan ilmoittaa verkkovirheistä // https://bugzilla.mozilla.org/show_bug.cgi?id=238559 } }

Tunnetut ongelmat

Pieni puskurin koko videota ladattaessa.

Katso myös

Muistiinpanot

  1. XMLHttpRequest-objekti W3C:n työluonnoksen selitettynä . W3.org. Käyttöpäivä: 14. heinäkuuta 2009. Arkistoitu alkuperäisestä 5. helmikuuta 2012.
  2. Uusia ominaisuuksia XMLHttpRequest2:ssa . Haettu 30. syyskuuta 2016. Arkistoitu alkuperäisestä 7. elokuuta 2016.
  3. Alkuperäinen XMLHTTPRequest-objekti . Haettu 2. joulukuuta 2009. Arkistoitu alkuperäisestä 6. maaliskuuta 2010.

Kirjallisuus

  • Dave Crane, Eric Pascarello, Darren James. AJAX toiminnassa: Tekniikka - Asynkroninen JavaScript ja XML = Ajax toiminnassa. - M .: "Williams" , 2006. - S. 640. - ISBN 1-932394-61-3 .
  • Dari K., Brinzare B., Cherchez-Toza F., Busika M. AJAX ja PHP: Dynamic Web Application Development. - Pietari. : Symbol Plus, 2006. - S. 336. - ISBN 5-93286-077-4 .

Linkit

Historia

Toteutus selaimissa

Oppaat

Standardit