XMLHttpRequest

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

XMLHTTP este un set de API-uri care pot fi utilizate de JavaScript , JScript , VBScript și alte limbaje de scriptare a browserului pentru a transfera XML sau alte date către și de la un server web prin HTTP . Cel mai mare avantaj al XMLHTTP este capacitatea de a actualiza dinamic o pagină web fără a reîncărca întreaga pagină. Este folosit de unele site-uri web pentru a accelera aplicațiile dinamice.

În plus față de XML, XMLHTTP poate fi utilizat pentru a prelua date în alte formate, cum ar fi JSON sau chiar text simplu.

XMLHttpRequest (prescurtat: XHR) este un element fundamental al tehnicii de dezvoltare web cunoscut sub acronimul AJAX și este utilizat în multe site-uri web pentru a implementa aplicații dinamice și interactive accesibile prin intermediul browserelor. Una dintre primele aplicații care a folosit această componentă a fost serviciul de webmail Google Gmail , urmat de Google Suggest, Meebo, Virtual Earth de la MSN și MapQuest .

Metode

Metodă Descriere
abort() Anulați solicitarea în curs.
getAllResponseHeaders() Returnează toate anteturile HTTP primite de server ca șir
getResponseHeader( nome_header ) Returnează valoarea antetului HTTP specificat
open( metodo, URL )
open( metodo, URL, async )
open( metodo, URL, async, userName )
open( metodo, URL, async, userName, password )
Specifică metoda, adresa URL și alți parametri opționali pentru cerere.

Parametrul metodei poate lua valoarea „GET”, „POST” sau „PUT” („GET” este utilizat atunci când solicitați date, în timp ce „POST” este utilizat pentru a trimite date, mai ales dacă lungimea datelor care trebuie transmise este mai mare de 512 octeți).

Parametrul URL poate fi relativ sau absolut.

Parametrul „asincronizat” specifică dacă cererea trebuie tratată asincron sau nu - „adevărat” înseamnă că scriptul poate continua procesarea fără a aștepta răspunsul după metoda send (), în timp ce „fals” înseamnă că scriptul este obligat să aștepte pentru un răspuns de la server înainte de a continua.

send( content ) Trimiteți cererea
setRequestHeader( chiave, valore) Adaugă perechea cheie / valoare la solicitarea de trimis.

Atribute

Atribut Descriere
onreadystatechange Managerul evenimentului lansat la fiecare schimbare de stare.
readyState Returnează starea curentă a instanței XMLHttpRequest:

0 = neinicializat, 1 = deschis, 2 = cerere trimisă, 3 = răspuns primit și 4 = răspuns primit.

responseText Returnează răspunsul serverului în format șir
responseXML Returnează răspunsul serverului ca obiect Document, care poate fi examinat conform specificațiilor W3C DOM.
status Returnează codul HTTP returnat de server (de exemplu 404 pentru „Not Found” și 200 pentru „OK”).
statusText Returnează status ca un șir descriptiv (de exemplu, „Nu a fost găsit” sau „OK”).

Istorie

Obiectul a fost inițial inventat de Microsoft , folosit de Internet Explorer 5.0 ca obiect ActiveX , accesibil prin JavaScript, VBScript sau orice alt limbaj acceptat de browser. Dezvoltatorii Mozilla au implementat apoi o versiune compatibilă în Mozilla 1.0. Mai târziu a fost susținut și de Apple cu Safari 1.2 și de Opera Software cu Opera 8.0.

Majoritatea paginilor bine concepute care folosesc XMLHTTP sunt destinate să ascundă implementările obiectului XMLHTTP încapsulând invocarea acestuia cu un JavaScript .

Funcționalități similare sunt incluse în DOM Nivelul 3 „Încărcare și salvare”, fostă recomandare W3C . La această adresă puteți găsi informații despre compatibilitatea cu toate browserele importante.

În prezent (2018) este implementat pe deplin în toate browserele majore. (Safari, Chrome, FireFox, Opera)

probleme cunoscute

Cache-ul Microsoft Internet Explorer

Browserul de acasă Microsoft implementează un cache pentru solicitările GET. Dezvoltatorii care nu sunt obișnuiți cu stocarea în cache nu se așteaptă ca cererile GET să fie stocate sau ignorate ca butonul de reîmprospătare. În unele situații, eșecul evitării memoriei cache generează probleme până la punctul de a fi considerat o eroare. O soluție la aceasta este utilizarea metodei POST în cereri, care nu este niciodată memorată în cache.

Există mai multe moduri de a încerca să ocolești acest lucru. Prima este să setați o dată deja în trecut în antetul pentru intrarea „Expiră”: aceasta va împiedica stocarea în cache a răspunsurilor. Un exemplu în PHP

 antet („Expiră: luni, 26 iul 1997 05:00:00 GMT”); // dezactivați cache-ul IE
header ("Ultima modificare:". gmdate ("D, d MYH: i: s"). "GMT"); 
antet („Cache-Control: no-cache, must-revalidate”); 
antet („Pragma: no-cache”);
antet („Expiră: -1”, fals);

În schimb, în ​​servletele Java:

 response.setHeader ("Pragma", "no-cache");
response.addHeader ("Cache-Control", "must-revalidate");
response.addHeader ("Cache-Control", "no-cache");
response.addHeader ("Cache-Control", "no-store");
response.setDateHeader ("Expiră", 0);

Alternativ, este posibil să forțați obiectul XMLHttpRequest să facă cererea după cum urmează:

 req.open ("GET", "xmlprovider.php");
req.setRequestHeader („Dacă-s-a modificat-din moment ce”, „Sâmbătă, 1 ianuarie 2000 00:00:00 GMT”);
cerere trimitere (nul);

O metodă finală este să adăugați un șir aleatoriu la sfârșitul adresei URL în solicitarea HTTP, făcând astfel browserul să creadă că solicită o altă pagină:

 req.open ("GET", "xmlprovider.php? sid =" + Math.random ());

Este important să rețineți că tehnicile prezentate ar trebui utilizate numai atunci când cache-ul este inadecvat și ar trebui evitate. Dacă aceste metode ar fi utilizate fără discriminare, aplicația ar putea suferi din punct de vedere al performanței.

Probleme cu caractere non-ASCII

Dacă răspunsul serverului nu este în format XML, textul de răspuns poate să nu funcționeze corect în timp ce se utilizează caractere non- ASCII , cum ar fi literele accentuate precum „este”. În timp ce Firefox tratează corect aceste date și afișează caracterul ofensator, Internet Explorer le va gestiona corect la prima cerere (deși pot exista probleme). Dacă solicitarea se repetă și browserul Microsoft folosește un rezultat în cache, atunci va genera o eroare JavaScript.

Utilizarea răspunsurilor XML și metoda responseXML permite ca totul să funcționeze corect cu orice caracter UTF-8 .

Alternativ, problema poate fi rezolvată prin setarea setului de caractere corespunzător pe pagina la care este adresată solicitarea, astfel încât textul răspunsului să fie produs în codificarea corectă de la început.

Reutilizați obiectul XMLHttpRequest în IE

În Internet Explorer, dacă metoda deschisă este apelată după legarea apelului onreadystatechange, va apărea o problemă la refolosirea obiectului XHR. Pentru a putea reutiliza corect obiectul XHR, utilizați mai întâi metoda deschisă și setați onreadystatechange după. Acest lucru se întâmplă deoarece IE implicit resetează obiectul în metoda deschisă dacă starea este finalizată . Pentru a afla mai multe despre Reutilizarea obiectului XMLHttpRequest în IE. .

Apelarea metodei deschise după setarea apelului invers determină pierderea compatibilității între diferite browsere pentru state pregătite. Comparați articolul despre quirksmode (EN). II

Suport Cross Browser

Dezvoltatorii Microsoft au fost primii care au inclus obiectul XMLHttp în controlul lor MSXML ActiveX. Dezvoltatorii proiectului Mozilla Open Source și-au creat versiunea XmlHttp, nu ca un control ActiveX, ci ca un obiect nativ în browser, cu numele XMLHttpRequest. Opera și Safari au dezvoltat un obiect similar, mai aproape de implementarea Mozilla. Pentru a crea biblioteci portabile JavaScript trebuie să includeți mai multe controale pentru a utiliza obiectul XMLHttp corespunzător.

De la versiunea 7, Internet Explorer acceptă nativ XMLHttpRequest.

linkuri externe