XMLHttpRequest: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Abbreviazione molto comune: XHR |
+{{Interfacce web}} |
||
(12 versioni intermedie di 12 utenti non mostrate) | |||
Riga 1:
{{F|programmazione|agosto 2012}}
'''XMLHTTP''' è un set di [[Application programming interface|API]] che possono essere usate da [[JavaScript]], [[JScript]], [[VBScript]] e altri linguaggi di scripting dei [[browser]] per trasferire [[XML]] o altri dati da e verso un [[web server]] tramite [[
Oltre a XML, XMLHTTP può essere usato per prendere dati in altri formati, come [[JSON]] o anche testo semplice.
XMLHttpRequest (abbreviato: XHR) è 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]].
== Metodi ==
Riga 51:
| Restituisce la risposta del server in formato stringa
|-
| <code>responseXML</code>
| Restituisce la risposta del server come oggetto Document, che potrà essere esaminato secondo le specifiche DOM del W3C.
|-
Riga 64:
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 (browser)|Safari]] 1.2 e da [[Opera Software]] con [[Opera (browser)|Opera]] 8.0.
La maggior parte delle pagine ben progettate che
Funzionalità simili sono incluse in [[Document Object Model|DOM]] Livello 3 "Load and Save", già raccomandazione del [[W3C]]. A [
Al momento (
== Problemi noti ==
=== La cache di Microsoft Internet Explorer ===
Il browser di
Ci sono diversi modi per cercare di aggirare il problema. Il primo consiste nell'impostare nell'header per la voce "Expires" una data già passata: ciò farà evitare il caching delle risposte. Un esempio in [[PHP]]:
<syntaxhighlight lang="php">
header( "Expires: -1", false );
</syntaxhighlight>
Invece nelle Java [[Servlet]]:
<syntaxhighlight lang="java">
response.setDateHeader("Expires", 0);
</syntaxhighlight>
In alternativa è possibile costringere l'oggetto XMLHttpRequest ad effettuare la richiesta nel seguente modo:
<syntaxhighlight lang="js">
req.open( "GET", "xmlprovider.php" );▼
req.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" ); </syntaxhighlight>
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:
<syntaxhighlight lang="js">
</syntaxhighlight>
È importante notare che le tecniche mostrate dovrebbero essere utilizzate
▲È importante notare che le tecniche mostrate dovrebbero essere utilizzate '''solo''' quando il caching risulta essere inappropriato e da evitare. Se questi metodi fossero usati indiscriminatamente, l'applicazione potrebbe risentirne in termini di prestazioni.
=== Problemi con caratteri 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 funzionare tutto correttamente con qualsiasi carattere [[UTF-8]].
In alternativa il problema può essere risolto settando il charset adeguato nella pagina a cui viene effettuata la richiesta, in modo che il testo di risposta sia prodotto nella giusta codifica fin dall'inizio.
=== 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 impostare onreadystatechange dopo. Questo capita perché IE resetta implicitamente l'oggetto nel metodo open se lo stato risulta essere ''completed''.
Chiamare il metodo open dopo aver settato la callback causa una perdita di compatibilità tra i diversi browser per i readystates.
=== 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|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.
Dalla versione 7, Internet Explorer supporta nativamente XMLHttpRequest.
== Note ==
<references/>
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{cita web|
* {{cita web|
* {{cita web|
* {{cita web | 1 = http://xulplanet.com/references/objref/XMLHttpRequest.html | 2 = XMLHttpRequest | accesso = 3 luglio 2005 | dataarchivio = 29 giugno 2005 | urlarchivio = https://web.archive.org/web/20050629004458/http://xulplanet.com/references/objref/XMLHttpRequest.html | urlmorto = sì }}
* {{cita web|url=
* {{cita web|http://jibbering.com/2002/4/httprequest.html|Usare l'oggetto XML HTTP Request}}
* {{cita web|url=
{{Interfacce web}}
{{Portale|internet|informatica}}
|