XMLHttpRequest

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 29 septembrie 2017; verificările necesită 14 modificări .

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.

Istorie

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]

Metode de clasă XMLHttpRequest

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!

Proprietăți ale clasei XMLHttpRequest

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.

Erori aruncate de clasa XMLHttpRequest

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).

Exemplu de utilizare

Planul de lucru cu obiectul XMLHttpRequest poate fi reprezentat după cum urmează:

  1. Instanțierea unui obiect XMLHttpRequest
  2. Deschiderea unei conexiuni
  3. Setarea handler-ului de evenimente (trebuie făcută după deschidere și înainte de trimitere la IE)
  4. Trimiterea unei cereri.

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:

  • <"GET"|"POST"|…>  — metoda de solicitare . Permis: DELETE, GET, HEAD, OPTIONS, POST, PUT.
  • <url>  este adresa cererii.
  • <asyncFlag>  este un indicator care determină dacă se utilizează o solicitare asincronă. Valoarea implicită este setată la adevărat.
  • <utilizator> , <parolă>  — autentificare și, respectiv, parolă. Specificat dacă este necesar.

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 } }

Probleme cunoscute

Dimensiune mică a memoriei tampon la încărcarea videoclipului.

Vezi și

Note

  1. Obiect XMLHttpRequest explicat de proiectul de lucru W3C . W3.org. Data accesului: 14 iulie 2009. Arhivat din original pe 5 februarie 2012.
  2. Caracteristici noi în XMLHttpRequest2 . Preluat la 30 septembrie 2016. Arhivat din original la 7 august 2016.
  3. Obiect XMLHTTPRequest nativ . Consultat la 2 decembrie 2009. Arhivat din original pe 6 martie 2010.

Literatură

  • Dave Crane, Eric Pascarello, Darren James. AJAX în acțiune: Tehnologie - JavaScript asincron și XML = Ajax în acțiune. - M .: „Williams” , 2006. - S. 640. - ISBN 1-932394-61-3 .
  • Dari K., Brinzare B., Cherchez-Toza F., Busika M. AJAX și PHP: Dynamic Web Application Development. - Sankt Petersburg. : Symbol Plus, 2006. - P. 336. - ISBN 5-93286-077-4 .

Link -uri

Istorie

Implementare în browsere

Tutoriale

Standarde