Web Analytics
Privacy Policy Cookie Policy Terms and Conditions XMLHttpRequest - Wikipedia

XMLHttpRequest

Da Wikipedia, l'enciclopedia libera.

XMLHTTP è un set di API che possono essere usate da JavaScript, JScript, VBScript e altri linguaggi di scripting dei browser per trasferire XML o altri dati da e a un web server tramite HTTP. Il più grande vantaggio di XMLHTTP è la possibilità di aggiornare dinamicamente una pagina web senza ricaricare l'intera pagina. Viene usato da alcun siti web per velocizzare applicazioni dinamiche. Un esempio di applicazione XMLHTTP è il servizio di posta elettronica Gmail di Google.

XMLHTTP è un componente importante nella tecnica di sviluppo web "AJAX".

Oltre a XML, XMLHTTP può essere usato per prendere dati in altri formati, come JSON o anche testo semplice.

XMLHttpRequest è un elemento fondamentale della tecnica di sviluppo web conosciuta con l'acronimo Ajax, ed è utilizzato in molti siti web per implementare applicazioni fruibili via browser dinamiche ed interattive. Una delle prime applicazioni ad utilizzare questo componente è stato il servizio di webmail di Google Gmail, a cui sono seguiti Google Suggest, Meebo, Virtual Earth di MSN e MapQuest.

Indice

[modifica] Metodi

Metodo Descrizione
abort() Cancella la richiesta in atto.
getAllResponseHeaders() Restituisce sotto forma di stringa tutti gli header HTTP ricevuti dal server
getResponseHeader( nome_header ) Restituisce il valore dell'header HTTP specificato
open( metodo, URL )
open( metodo, URL, async )
open( metodo, URL, async, userName )
open( metodo, URL, async, userName, password )
Specifica il metodo, l'URL, and altri parametri opzionali per la richiesta.

Il parametro metodo può assumere valore di "GET", "POST", oppure "PUT" ("GET" è utilizzato quando si richiedono dati, mentre "POST" è utilizzato per inviare dati, specialmente se la lunghezza dei dati da trasmettere è maggiore di 512 bytes).

Il parametro URL può essere sia relativo che assoluto.

Il parametro "async" specifica se la richiesta deve essere gestita in modo asincrono oppure no – "true" significa che lo script può proseguire l'elaborazione senza aspettare la risposta dopo il metodo send(), mentre "false" significa che lo script è costretto ad aspettare una risposta dal server prima di continuare.

send( content ) Invia la richiesta
setRequestHeader( chiave, valore) Aggiunge la coppia chiave/valore alla richiesta da inviare.

[modifica] Attributi

Attributo Descrizione
onreadystatechange Gestore dell'evento lanciato ad ogni cambiamento di stato.
readyState Restituisce lo stato corrente dell'istanza di XMLHttpRequest:

0 = non inizializzato, 1 = aperto, 2 = richiesta inviata, 3 = risposta in ricezione e 4 = risposta ricevuta.

responseText Restituisce la risposta del server in formato stringa
responseXML Restituisce la risposta del server come XML, che potrà essere analizzato e parsato come secondo le specifiche DOM del W3C.
status Restituisce il codice HTTP restituito dal server (per esempio 404 per "Not Found" e 200 per "OK").
statusText Restituisce lo status in forma di stringa descrittiva (per esempio. "Not Found" oppure "OK").

[modifica] Storia

L'oggetto venne originariamente inventato da Microsoft, usato da Internet Explorer 5.0 come oggetto ActiveX, accessibile via JavaScript, VBScript, o qualsiasi altro linguaggio supportato dal browser. Gli sviluppatori di Mozilla implementarono poi una versione compatibile in Mozilla 1.0. Successivamente è stato supportato anche da Apple con Safari 1.2 e da Opera Software con Opera 8.0.

La maggior parte delle pagine ben progettate che usando XMLHTTP sono destinate a nascondere le implementazioni dell'oggetto XMLHTTP incapsulando la sua invocazione con un Javascript.

Funzionalità simili sono incluse in DOM Livello 3 "Load and Save", già raccomandazione del W3C. Tuttavia, per ora (2005), nessun web browser supporta in modo completo questa specifica. XMLHttpRequest è comunque pensato come uno standard di fatto per il futuro.

[modifica] Problemi noti

[modifica] La cache di Microsoft Internet Explorer

Il browser di casa Microsoft implementa una cache per le richieste GET. Gli sviluppatori che non sono abituati al caching non si aspettano che le richieste GET vengano memorizzate, oppure che essa venga ignorata come per il tasto di refresh. In alcune situazioni, non riuscire ad evitare la cache genera problemi al punto di poter essere considerato un bug. Una soluzione a questo è di utilizzare il metodo POST nelle request, che non viene mai memorizzato in cache.

Ci sono diversi modi per cercare di aggirare il problema. Il primo consiste nel settare nell'header per la voce "Expires" una data già passata farà evitare il caching delle risposte. Un esempio in PHP

header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );  // disable IE caching
header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" ); 
header( "Cache-Control: no-cache, must-revalidate" ); 
header( "Pragma: no-cache" );

Invece nelle Java Servlet:

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("Expires", 0);  

In alternativa è possibile costringere l'oggetto XMLHttpRequest ad effettuare la richiesta nel seguente mod:

req.open( "GET", "xmlprovider.php" );
req.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
req.send( null );

Un ultimo metodo è di aggiungere una stringa casuale alla fine dell'URL nella richiesta HTTP, facendo credere quindi al browser di richiedere una pagina diversa:

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

E' importante notare che le tecniche mostrate dovrebbero essere utilizzate solo quanto il caching risulta essere inappropriato e da evitare. Se questi metodi fossero usati indiscrinatamente, l'applicazione potrebbe risentirne in termini di prestazioni.

[modifica] Problemi con caratteri accentato e non ASCII

Se la risposta del server non è in formato XML, il 'responseText' potrebbe non funzionare correttamente mentre si utilizzano i caratteri non-ASCII, per esempio le lettere accentate come è.. Mentre Firefox gestisce correttamente questi dati e visualizza il carattere incriminato, Internet Explorer lo gestirà correttamente alla prima richiesta (anche se potrebbero esserci dei problemi) Se la richiesta viene ripetuta ed il browser di Microsoft utilizza un risultato memorizzato in cache, allora genererà un errore Javascript.

L'utilizzo di risposte XML e del metodo 'responseXML' permette di far funzionere tutto correttamente con qualsiasi carattere UTF-8.

[modifica] Riutilizzare l'oggetto XMLHttpRequest in IE

In Internet Explorer, se il metodo open viene chiamato dopo aver associato la callback onreadystatechange, ci sarà un problema nel riutilizzo dell'oggetto XHR. Per essere in grado di riutilizzare correttamente l'oggetto XHR, utilizzare il metodo open prima e settare onreadystatechange dopo. Questo capita perché IE resetta implicitamente l'oggetto nel motodo open se lo stato risulta essere 'completed'. Per approfondire il discorso Reusing XMLHttpRequest Object in IE..

Chiamare il metodo open dopo aver settato la callback causa una perdita di compatibilità tra i diversi browser per i readystates. Confronta l'articolo su quirksmode (EN).

[modifica] Supporto Cross Browser

Gli sviluppatori Microsoft furono i primi ad includere l'oggetto XMLHttp nel loro MSXML ActiveX control. Gli sviluppatori del progetto Open Source Mozilla crearono la loro versione di XmlHttp, non come un controllo ActiveX ma come un oggetto nativo nel browser, con il nome di XMLHttpRequest. Opera e Safari hanno sviluppato un oggetto simile, più vicino all'implementazione Mozilla. Per creare librerie javascript portabili è necessario includere diversi controlli per utilizzare l'oggetto XMLHttp appropriato.

Internet Explorer 7 supporterà nativamente XMLHttpRequest.

[modifica] Collegamenti esterni

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu