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.
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]
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! |
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. |
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). |
Suunnitelma työskennellä XMLHttpRequest-objektin kanssa voidaan esittää seuraavasti:
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ä:
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 } }Pieni puskurin koko videota ladattaessa.
JavaScript | |
---|---|
Ideoita | |
Kääntäjät | |
Moottorit | |
Kirjastot ja puitteet | |
Toimittajat | |
Työkalut |
|
Liittyvät tekniikat | |
Ihmiset | |
Kategoria |
World Wide Web Consortium (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tuotteet ja standardit |
| ||||||||||||||
Organisaatiot |
| ||||||||||||||
PÄÄLLÄ |
| ||||||||||||||
Konferenssit |
|