XMLHttpRequest (XMLHTTP, XHR) er en API tilgængelig i browser -scriptsprog såsom JavaScript . Bruger HTTP- eller HTTPS -anmodninger direkte til webserveren og indlæser serverens svardata direkte i det kaldende script. [1] Information kan sendes i ethvert tekstformat , såsom XML , HTML eller JSON . Giver dig mulighed for at sende HTTP-anmodninger til serveren uden at genindlæse siden.
XMLHTTP er en vigtig komponent i AJAX (Asynchronous JavaScript And XML ) teknologien, der bruges af mange websteder til at skabe dynamiske, responsive applikationer. For eksempel bruges XMLHTTP af websteder som Bing Maps , Gmail , Google Maps , Google Suggest , Facebook .
XMLHTTP virker kun med filer, der er på samme domæne som siden, der bruger XMLHTTP, men der er en løsning. Som i tilfældet med JavaScript, er denne mulighed for at omgå begrænsningen lavet med sikkerhed i tankerne ( cross-site scripting ).
Selvom navnet indeholder forkortelsen XML, pålægger teknologien ikke begrænsninger for formatet af de transmitterede data. Data kan sendes som XML, JSON, HTML eller blot almindelig tekst. Udvikleren kan selvstændigt oprette et format til dataoverførsel. Vær dog opmærksom på, at HTTP-tekstprotokollen bruges ved afsendelse, og derfor skal data, når du bruger GET-metoden, transmitteres i form af tekst (det vil sige, at binære data skal kodes f.eks. i base64 ) . Ved brug af POST-metoden er ingen kodning nødvendig.
Det blev først udviklet af Microsoft , og dukkede op i Outlook på webkomponenten af softwareproduktet Microsoft Exchange Server 2000. Det fik navnet IXMLHTTPRequest. Værket blev senere indarbejdet i MSXML 2.0 som et ActiveX -objekt tilgængeligt via JScript , VBScript eller andre browser-understøttede scriptsprog. MSXML 2.0 var inkluderet i Internet Explorer 5.
Mozilla - projektprogrammører udviklede derefter en kompatibel version kaldet nsIXMLHttpRequest i Mozilla 0.6. Bønnen blev tilgået via et JavaScript-objekt kaldet XMLHttpRequest. Fuld funktionalitet blev dog kun opnået i Mozilla 1.0. Yderligere understøttelse af XMLHttpRequest dukkede op i Safari 1.2 , Opera 8.01 og andre.
Den seneste officielle specifikation er version 1.0 ( XMLHttpRequest dateret 19. december 2012), som har status som den nuværende standard (Living Standard) og version 2.0 ( XMLHttpRequest Level 2 , dateret 17. januar 2012), som har status som en fungerende version. Den anden version introducerer progress-hændelseshandlere, understøttelse af forespørgsler på tværs af domæner og arbejde med binære data. [2]
Metode | Beskrivelse |
---|---|
abort() | Annullerer den aktuelle anmodning, fjerner alle overskrifter, indstiller serversvarsteksten til null. |
getAllResponseHeaders() | Returnerer den komplette liste over HTTP-headere som en streng. Overskrifter er adskilt af bindestreger (CR+LF). Hvis fejlflaget er sandt, returneres en tom streng. Hvis status er 0 eller 1, forårsager det en INVALID_STATE_ERR-fejl. |
getResponseHeader(headerName) | Returnerer værdien af den angivne overskrift. Hvis fejlflaget er sandt, returneres null. Hvis titlen ikke findes, returneres null. Hvis status er 0 eller 1, forårsager det en INVALID_STATE_ERR-fejl. |
åben (metode, URL, async, brugernavn, adgangskode) | Angiver metoden, URL'en og andre valgfri forespørgselsparametre; async-parameteren bestemmer, om arbejdet udføres i asynkron tilstand. De sidste to parametre er valgfrie. |
send (indhold) | Sender en anmodning til serveren. |
setRequestHeader(etiket, værdi) | Tilføjer en HTTP-header til anmodningen. |
overrideMimeType(mimeType) | Giver dig mulighed for at angive dokumentets mime-type, hvis serveren ikke har overført det eller overført det forkert. OBS : metoden er ikke tilgængelig i Internet Explorer! |
Ejendom | Type | Beskrivelse |
---|---|---|
klar til at skifte | EventListener | En hændelseshandler, der udløses hver gang et objekts tilstand ændres. Navnet skal skrives med små bogstaver. |
klarState | usigneret kort | Objektets aktuelle tilstand (0 - ikke initialiseret, 1 - åben, 2 - sender data, 3 - modtager data og 4 - data er indlæst) |
svarTekst | DOMString | Teksten til svaret på anmodningen. Hvis tilstanden ikke er 3 eller 4, returneres en tom streng. |
responsXML | dokument | Teksten i svaret på anmodningen i form af XML, som derefter kan behandles gennem DOM . Hvis tilstanden ikke er 4, returneres null. |
status | usigneret kort | HTTP-status som et tal ( 404 - "Ikke fundet", 200 - "OK" osv.) |
statustekst | DOMString | Status som en streng ("Ikke fundet", "OK" osv.). Hvis status ikke genkendes, bør brugerens browser vise en INVALID_STATE_ERR-fejl. |
Navn | Koden | Beskrivelse |
---|---|---|
SECURITY_ERR | atten | Kaldes, når der gøres et forsøg på at lave en anmodning, som ikke er tilladt af sikkerhedsindstillingerne i brugerens browser. |
NETWORK_ERR | 101 | Kaldet på en netværksfejl (under en synkron anmodning). |
AFBRYD_FEJL | 102 | Kaldes, når brugeren afbryder anmodningen (under en synkron anmodning). |
Planen for at arbejde med XMLHttpRequest-objektet kan repræsenteres som følger:
Instantiering af et XMLHttpRequest-objekt.
På dette stadium er der behov for en separat implementering for forskellige browsere. Konstruktionen af objektskabelse adskiller sig: i IE 5 - IE 6 er det implementeret gennem ActiveXObject og i andre browsere (IE 7 og nyere, Mozilla, Opera, Chrome, Netscape og Safari) - som et indbygget objekt af typen XMLHttpRequest .
Opfordringen til tidligere versioner af Internet Explorer ser sådan ud [3] :
var req = nyt ActiveXObject ( "Microsoft.XMLHTTP" );I andre browsere:
var req = ny XMLHttpRequest ();Det vil sige, for at sikre kode på tværs af browsere , behøver du kun at tjekke for tilstedeværelsen af window.XMLHttpRequest- og window.ActiveXObject-objekter, og, afhængigt af hvilken der er, anvende det.
Som en universel løsning foreslås det at bruge følgende funktion:
function createRequestObject () { if ( typeof XMLHttpRequest === 'undefined' ) { XMLHttpRequest = function () { try { return new ActiveXObject ( "Msxml2.XMLHTTP.6.0" ); } catch ( e ) {} prøv { returner nyt ActiveXObject ( "Msxml2.XMLHTTP.3.0" ); } catch ( e ) {} prøv { returner nyt ActiveXObject ( "Msxml2.XMLHTTP" ); } catch ( e ) {} prøv { returner nyt ActiveXObject ( "Microsoft.XMLHTTP" ); } catch ( e ) {} throw new Error ( "Denne browser understøtter ikke XMLHttpRequest." ); }; } returner ny XMLHttpRequest (); }Installation af en hændelseshandler, åbning af en forbindelse og afsendelse af anmodninger
Disse opkald ser sådan ud:
kræve . åben ( < "GET" | "POST" | ... > , < url > [, < asyncFlag > [, < bruger > , < adgangskode > ]]); kræve . onreadystatechange = processReqChange ;Hvor:
Efter at have defineret alle parametrene for anmodningen, er det kun tilbage at sende det. Dette gøres ved hjælp af send() metoden. Når du sender en GET-anmodning for versionen uden ActiveX, skal du angive null-parameteren, i andre tilfælde kan du ikke angive nogen parametre. Det vil ikke være en fejl, hvis GET-parameteren altid er null:
kræve . send ( nul );Derefter begynder ovenstående hændelseshandler at arbejde. Det er faktisk hoveddelen af programmet. Behandleren opsnapper normalt alle mulige anmodningsstatuskoder og kalder de relevante handlinger, samt opsnapper mulige fejl. Eksempelkode med disse to funktioner:
varreq ; _ funktion loadXMLDoc ( url ) { req = null ; if ( vindue . XMLHttpRequest ) { prøv { req = new XMLHttpRequest (); } catch ( e ) {} } else if ( vindue . ActiveXObject ) { prøv { req = new ActiveXObject ( 'Msxml2.XMLHTTP' ); } catch ( e ) { prøv { req = new ActiveXObject ( 'Microsoft.XMLHTTP' ); } fange ( e ){} } } if ( req ) { req . åben ( "GET" , url , sand ); kræve . onreadystatechange = processReqChange ; kræve . send ( nul ); } } function processReqChange () { prøv { // Vigtigt! // only if state is "complete" if ( req . readyState == 4 ) { // for status "OK" if ( req . status == 200 ) { // process response } else { alert ( "Failed to get data : \n" + req . statusText ); } } } catch ( e ) { // alert('Fejl: ' + e. beskrivelse); // Bugzilla Bug 238559 XMLHttpRequest har brug for en måde at rapportere netværksfejl på // https://bugzilla.mozilla.org/show_bug.cgi?id=238559 } }Lille bufferstørrelse ved indlæsning af video.
JavaScript | |
---|---|
Ideer | |
Kompilere | |
Motorer | |
Biblioteker og rammer | |
Redaktører | |
Værktøjer |
|
Relaterede teknologier | |
Mennesker | |
Kategori |
World Wide Web Consortium (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Produkter og standarder |
| ||||||||||||||
Organisationer |
| ||||||||||||||
PÅ |
| ||||||||||||||
Konferencer |
|