XMLHttpRequest (XMLHTTP, XHR) este un API disponibil în limbaje de scriptare a browserului , cum ar fi JavaScript . Utilizează solicitările HTTP sau HTTPS direct către serverul web și încarcă datele de răspuns ale serverului direct în scriptul de apelare. [1] Informațiile pot fi trimise în orice format text , cum ar fi XML , HTML sau JSON . Vă permite să faceți solicitări HTTP către server fără a reîncărca pagina.
XMLHTTP este o componentă importantă a tehnologiei AJAX (Asynchronous JavaScript And XML ) utilizată de multe site-uri pentru a crea aplicații dinamice, receptive. De exemplu, XMLHTTP este folosit de site-uri precum Bing Maps , Gmail , Google Maps , Google Suggest , Facebook .
XMLHTTP funcționează numai cu fișiere care se află pe același domeniu cu pagina care utilizează XMLHTTP, dar există o soluție. La fel ca și în cazul JavaScript, această capacitate de a ocoli restricția este realizată având în vedere securitatea ( cross-site scripting ).
Deși numele conține abrevierea XML, tehnologia nu impune restricții cu privire la formatul datelor transmise. Datele pot fi trimise ca XML, JSON, HTML sau doar text simplu. Dezvoltatorul poate crea independent un format pentru transferul de date. Cu toate acestea, rețineți că protocolul text HTTP este utilizat la trimitere și, prin urmare, atunci când utilizați metoda GET, datele trebuie transmise sub formă de text (adică datele binare ar trebui să fie codificate, de exemplu, în base64 ) . Când utilizați metoda POST, nu este necesară codarea.
A fost dezvoltat pentru prima dată de Microsoft , apărând în componenta Outlook pe web a produsului software Microsoft Exchange Server 2000. A fost numit IXMLHTTPRequest. Lucrarea a fost ulterior încorporată în MSXML 2.0 ca obiect ActiveX accesibil prin JScript , VBScript sau alte limbaje de scripting acceptate de browser. MSXML 2.0 a fost inclus cu Internet Explorer 5.
Programatorii de proiecte Mozilla au dezvoltat apoi o versiune compatibilă numită nsIXMLHttpRequest în Mozilla 0.6. Bean-ul a fost accesat printr-un obiect JavaScript numit XMLHttpRequest. Cu toate acestea, funcționalitatea completă a fost obținută numai în Mozilla 1.0. Asistență suplimentară pentru XMLHttpRequest a apărut în Safari 1.2 , Opera 8.01 și altele.
Cea mai recentă specificație oficială este versiunea 1.0 ( XMLHttpRequest din 19 decembrie 2012), care are statutul de standard actual (Living Standard) și versiunea 2.0 ( XMLHttpRequest Level 2 , din 17 ianuarie 2012), care are statutul de funcțional. versiune. A doua versiune introduce gestionarea evenimentelor de progres, suport pentru interogări pe mai multe domenii și lucru cu date binare. [2]
Metodă | Descriere |
---|---|
intrerupere de sarcina() | Anulează cererea curentă, elimină toate anteturile, setează textul de răspuns al serverului la nul. |
getAllResponseHeaders() | Returnează lista completă a antetelor HTTP sub formă de șir. Titlurile sunt separate prin cratime (CR+LF). Dacă indicatorul de eroare este adevărat, returnează un șir gol. Dacă starea este 0 sau 1, provoacă o eroare INVALID_STATE_ERR. |
getResponseHeader(headerName) | Returnează valoarea antetului specificat. Dacă indicatorul de eroare este adevărat, returnează null. Dacă titlul nu este găsit, returnează null. Dacă starea este 0 sau 1, provoacă o eroare INVALID_STATE_ERR. |
deschide (metodă, URL, asincron, nume de utilizator, parolă) | Specifică metoda, adresa URL și alți parametri opționali de interogare; parametrul asincron determină dacă lucrarea este efectuată în modul asincron. Ultimii doi parametri sunt opționali. |
trimite (conținut) | Trimite o cerere către server. |
setRequestHeader(etichetă, valoare) | Adaugă un antet HTTP la cerere. |
overrideMimeType(mimeType) | Vă permite să specificați tipul mime al documentului dacă serverul nu l-a transferat sau l-a transferat incorect. Atenție : metoda nu este disponibilă în Internet Explorer! |
Proprietate | Tip de | Descriere |
---|---|---|
onreadystatechange | EventListener | Un handler de evenimente care se declanșează de fiecare dată când starea unui obiect se schimbă. Numele trebuie scris cu litere mici. |
readyState | scurt nesemnat | Starea curentă a obiectului (0 - neinițializat, 1 - deschis, 2 - trimitere date, 3 - primire date și 4 - date încărcate) |
text de răspuns | DOMstring | Textul răspunsului la cerere. Dacă starea nu este 3 sau 4, returnează un șir gol. |
răspunsXML | document | Textul răspunsului la cerere sub formă de XML, care poate fi apoi procesat prin DOM . Dacă starea nu este 4, returnează null. |
stare | scurt nesemnat | Starea HTTP ca număr ( 404 - „Negăsit”, 200 - „OK”, etc.) |
statusText | DOMstring | Stare ca șir („Negăsit”, „OK”, etc.). Dacă starea nu este recunoscută, browserul utilizatorului ar trebui să genereze o eroare INVALID_STATE_ERR. |
Nume | Codul | Descriere |
---|---|---|
SECURITY_ERR | optsprezece | Apelat atunci când se încearcă efectuarea unei cereri care nu este permisă de setările de securitate din browserul utilizatorului. |
NETWORK_ERR | 101 | Apelat la o eroare de rețea (în timpul unei solicitări sincrone). |
ABORT_ERR | 102 | Apelat atunci când utilizatorul întrerupe cererea (în timpul unei solicitări sincrone). |
Planul de lucru cu obiectul XMLHttpRequest poate fi reprezentat după cum urmează:
Instanțierea unui obiect XMLHttpRequest.
În această etapă, este necesară o implementare separată pentru diferite browsere. Construcția creării de obiecte diferă: în IE 5 - IE 6 este implementată prin ActiveXObject, iar în alte browsere (IE 7 și versiuni ulterioare, Mozilla, Opera, Chrome, Netscape și Safari) - ca obiect încorporat de tip XMLHttpRequest .
Apelul pentru versiunile anterioare de Internet Explorer arată astfel [3] :
var req = nou ActiveXObject ( "Microsoft.XMLHTTP" );În alte browsere:
var req = new XMLHttpRequest ();Adică, pentru a asigura codul cross-browser , trebuie doar să verificați prezența obiectelor window.XMLHttpRequest și window.ActiveXObject și, în funcție de care este, să le aplicați.
Ca soluție universală, se propune utilizarea următoarei funcții:
function createRequestObject () { if ( typeof XMLHttpRequest === 'nedefinit' ) { XMLHttpRequest = function () { try { 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 ( „Acest browser nu acceptă XMLHttpRequest.” ); }; } returnează XMLHttpRequest nou (); }Instalarea unui handler de evenimente, deschiderea unei conexiuni și trimiterea cererilor
Aceste apeluri arată astfel:
solicitat . deschide ( < „GET” | „POST” | ... > , < url > [, < asyncFlag > [, < utilizator > , < parola > ]]); solicitat . onreadystatechange = processReqChange ;Unde:
După definirea tuturor parametrilor cererii, rămâne doar să o trimitem. Acest lucru se face folosind metoda send(). Când trimiteți o cerere GET pentru versiunea fără ActiveX, trebuie să specificați parametrul nul, în alte cazuri, nu puteți specifica niciun parametru. Nu va fi o eroare dacă parametrul GET este întotdeauna nul:
solicitat . trimite ( nul );După aceea, handlerul de evenimente de mai sus începe să funcționeze. Este de fapt partea principală a programului. De obicei, handlerul interceptează toate codurile posibile de stare a cererii și apelează acțiunile corespunzătoare, precum și interceptează posibilele erori. Exemplu de cod cu aceste două funcții:
varreq ; _ function loadXMLDoc ( url ) { req = null ; if ( fereastra . XMLHttpRequest ) { try { req = new XMLHttpRequest (); } catch ( e ){} } else if ( fereastra . ActiveXObject ) { try { req = new ActiveXObject ( 'Msxml2.XMLHTTP' ); } catch ( e ){ încercați { req = nou ActiveXObject ( 'Microsoft.XMLHTTP' ); } prinde ( e ){} } } dacă ( req ) { req . deschide ( "GET" , url , true ); solicitat . onreadystatechange = processReqChange ; solicitat . trimite ( nul ); } } function processReqChange () { try { // Important! // numai dacă starea este „completă” dacă ( req . readyState == 4 ) { // pentru starea „OK” if ( req . status == 200 ) { // procesează răspunsul } else { alert ( „Eșuat la obținerea datelor : \n" + req . statusText ); } } } catch ( e ) { // alert('Eroare: ' + e. descriere); // Bugzilla Bug 238559 XMLHttpRequest are nevoie de o modalitate de a raporta erorile de rețea // https://bugzilla.mozilla.org/show_bug.cgi?id=238559 } }Dimensiune mică a memoriei tampon la încărcarea videoclipului.
JavaScript | |
---|---|
Idei | |
Compilatoare | |
Motoare | |
Biblioteci și cadre | |
Editori | |
Instrumente |
|
Tehnologii conexe | |
oameni | |
Categorie |
Consorțiul World Wide Web (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Produse și standarde |
| ||||||||||||||
Organizații |
| ||||||||||||||
PE |
| ||||||||||||||
Conferințe |
|