XMLHttpRequest (XMLHTTP, XHR) är ett API tillgängligt i webbläsares skriptspråk som JavaScript . Använder HTTP- eller HTTPS -förfrågningar direkt till webbservern och laddar serverns svarsdata direkt i det anropande skriptet. [1] Information kan skickas i vilket textformat som helst , som XML , HTML eller JSON . Låter dig göra HTTP-förfrågningar till servern utan att ladda om sidan.
XMLHTTP är en viktig komponent i AJAX -tekniken (Asynchronous JavaScript And XML ) som används av många webbplatser för att skapa dynamiska, responsiva applikationer. Till exempel används XMLHTTP av sajter som Bing Maps , Gmail , Google Maps , Google Suggest , Facebook .
XMLHTTP fungerar bara med filer som finns på samma domän som sidan som använder XMLHTTP, men det finns en lösning. Precis som i fallet med JavaScript är denna möjlighet att kringgå begränsningen gjord med säkerhet i åtanke ( cross-site scripting ).
Även om namnet innehåller förkortningen XML, sätter tekniken inga begränsningar på formatet på de överförda data. Data kan skickas som XML, JSON, HTML eller bara vanlig text. Utvecklaren kan självständigt skapa ett format för dataöverföring. Tänk dock på att HTTP-textprotokollet används vid sändning, och därför måste, när du använder GET-metoden, data överföras i form av text (det vill säga binär data ska kodas, till exempel i base64 ) . När du använder POST-metoden behövs ingen kodning.
Den utvecklades först av Microsoft och dök upp i Outlook på webbkomponenten i programvaran Microsoft Exchange Server 2000. Den fick namnet IXMLHTTPrequest. Verket inkorporerades senare i MSXML 2.0 som ett ActiveX -objekt tillgängligt via JScript , VBScript eller andra webbläsarstödda skriptspråk. MSXML 2.0 ingick i Internet Explorer 5.
Mozilla- projektprogrammerare utvecklade sedan en kompatibel version som heter nsIXMLHttpRequest i Mozilla 0.6. Bönan nåddes via ett JavaScript-objekt som heter XMLHttpRequest. Full funktionalitet uppnåddes dock endast i Mozilla 1.0. Ytterligare stöd för XMLHttpRequest dök upp i Safari 1.2 , Opera 8.01 och andra.
Den senaste officiella specifikationen är version 1.0 ( XMLHttpRequest daterad 19 december 2012), som har status som nuvarande standard (Living Standard) och version 2.0 ( XMLHttpRequest Level 2 , daterad 17 januari 2012), som har status som fungerande version. Den andra versionen introducerar förloppshändelsehanterare, stöd för frågor över flera domäner och arbete med binär data. [2]
Metod | Beskrivning |
---|---|
abort() | Avbryter den aktuella begäran, tar bort alla rubriker, ställer in serversvarstexten till null. |
getAllResponseHeaders() | Returnerar hela listan med HTTP-rubriker som en sträng. Rubriker separeras med bindestreck (CR+LF). Om felflaggan är sann returneras en tom sträng. Om statusen är 0 eller 1, orsakar det ett INVALID_STATE_ERR-fel. |
getResponseHeader(headerName) | Returnerar värdet för den angivna rubriken. Om felflaggan är sann returneras null. Om titeln inte hittas returneras null. Om statusen är 0 eller 1, orsakar det ett INVALID_STATE_ERR-fel. |
öppen (metod, URL, asynkron, användarnamn, lösenord) | Anger metod, URL och andra valfria frågeparametrar; parametern async avgör om arbetet utförs i asynkront läge. De två sista parametrarna är valfria. |
skicka (innehåll) | Skickar en förfrågan till servern. |
setRequestHeader(etikett, värde) | Lägger till en HTTP-rubrik till begäran. |
åsidosättaMimeType(mimeType) | Låter dig ange dokumentets mime-typ om servern inte överförde det eller överförde det felaktigt. Observera : metoden är inte tillgänglig i Internet Explorer! |
Fast egendom | Sorts | Beskrivning |
---|---|---|
redo att byta tillstånd | EventListener | En händelsehanterare som aktiveras varje gång ett objekts tillstånd ändras. Namnet måste skrivas med gemener. |
readyState | osignerad kort | Objektets nuvarande tillstånd (0 - ej initierad, 1 - öppen, 2 - skickar data, 3 - tar emot data och 4 - data laddas) |
svarText | DOMString | Texten i svaret på begäran. Om tillståndet inte är 3 eller 4, returneras en tom sträng. |
svarXML | dokumentera | Texten i svaret på begäran i form av XML, som sedan kan bearbetas genom DOM . Om tillståndet inte är 4, returneras null. |
status | osignerad kort | HTTP-status som ett nummer ( 404 - "hittades inte", 200 - "OK", etc.) |
statusText | DOMString | Status som en sträng ("hittades inte", "OK", etc.). Om statusen inte känns igen bör användarens webbläsare visa ett INVALID_STATE_ERR-fel. |
namn | Koden | Beskrivning |
---|---|---|
SECURITY_ERR | arton | Anropas när ett försök görs att göra en begäran som inte tillåts av säkerhetsinställningarna i användarens webbläsare. |
NETWORK_ERR | 101 | Anropade ett nätverksfel (under en synkron begäran). |
ABORT_ERR | 102 | Anropas när användaren avbryter begäran (under en synkron begäran). |
Planen för att arbeta med XMLHttpRequest-objektet kan representeras enligt följande:
Instantiera ett XMLHttpRequest-objekt.
I detta skede behövs en separat implementering för olika webbläsare. Konstruktionen av objektskapande skiljer sig: i IE 5 - IE 6 implementeras det genom ActiveXObject, och i andra webbläsare (IE 7 och högre, Mozilla, Opera, Chrome, Netscape och Safari) - som ett inbyggt objekt av typen XMLHttpRequest .
Uppmaningen för tidigare versioner av Internet Explorer ser ut så här [3] :
var req = nytt ActiveXObject ( "Microsoft.XMLHTTP" );I andra webbläsare:
var req = new XMLHttpRequest ();Det vill säga, för att säkerställa kod över webbläsare behöver du bara kontrollera förekomsten av window.XMLHttpRequest och window.ActiveXObject-objekt, och, beroende på vilket, tillämpa det.
Som en universell lösning föreslås det att använda följande funktion:
function createRequestObject () { if ( typeof XMLHttpRequest === 'undefined' ) { XMLHttpRequest = function () { try { return new ActiveXObject ( "Msxml2.XMLHTTP.6.0" ); } catch ( e ) {} prova { returnera nytt ActiveXObject ( "Msxml2.XMLHTTP.3.0" ); } catch ( e ) {} prova { returnera nytt ActiveXObject ( "Msxml2.XMLHTTP" ); } catch ( e ) {} prova { returnera nytt ActiveXObject ( "Microsoft.XMLHTTP" ); } catch ( e ) {} throw new Error ( "Denna webbläsare stöder inte XMLHttpRequest." ); }; } returnera ny XMLHttpRequest (); }Installera en händelsehanterare, öppna en anslutning och skicka förfrågningar
Dessa samtal ser ut så här:
req . öppen ( < "GET" | "POST" | ... > , < url > [, < asyncFlag > [, < användare > , < lösenord > ]]); req . onreadystatechange = processReqChange ;Var:
Efter att ha definierat alla parametrar för begäran återstår det bara att skicka den. Detta görs med metoden send(). När du skickar en GET-förfrågan för versionen utan ActiveX måste du ange null-parametern, i andra fall kan du inte ange några parametrar. Det kommer inte att vara ett fel om GET-parametern alltid är null:
req . skicka ( noll );Efter det börjar ovanstående händelsehanterare att fungera. Det är faktiskt huvuddelen av programmet. Hanteraren avlyssnar vanligtvis alla möjliga statuskoder för begäran och anropar lämpliga åtgärder, samt avlyssnar eventuella fel. Exempelkod med dessa två funktioner:
varreq ; _ funktion loadXMLDoc ( url ) { req = null ; if ( fönster . XMLHttpRequest ) { try { req = new XMLHttpRequest (); } catch ( e ) {} } else if ( window . ActiveXObject ) { try { req = new ActiveXObject ( 'Msxml2.XMLHTTP' ); } catch ( e ) { try { req = new ActiveXObject ( 'Microsoft.XMLHTTP' ); } fånga ( e ) {} } } if ( req ) { req . open ( "GET" , url , true ); req . onreadystatechange = processReqChange ; req . skicka ( noll ); } } function processReqChange () { try { // Viktigt! // only if state is "complete" if ( req . readyState == 4 ) { // for status "OK" if ( req . status == 200 ) { // process response } else { alert ( "Det gick inte att hämta data : \n" + req . statusText ); } } } catch ( e ) { // alert('Fel: ' + e. beskrivning); // Bugzilla Bug 238559 XMLHttpRequest behöver ett sätt att rapportera nätverksfel // https://bugzilla.mozilla.org/show_bug.cgi?id=238559 } }Liten buffertstorlek när video laddas.
JavaScript | |
---|---|
Idéer | |
Kompilatorer | |
Motorer | |
Bibliotek och ramar | |
Redaktörer | |
Verktyg |
|
Relaterade teknologier | |
människor | |
Kategori |
World Wide Web Consortium (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Produkter och standarder |
| ||||||||||||||
Organisationer |
| ||||||||||||||
PÅ |
| ||||||||||||||
Konferenser |
|