XMLHttpRequest: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: sostituisco E' con È |
+{{Interfacce web}} |
||
(64 versioni intermedie di 58 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
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
== Metodi ==
{| class="wikitable" width="90%"
! Metodo
! Descrizione
|-
| <
| Cancella la richiesta in atto.
|-
| <
| Restituisce sotto forma di stringa tutti gli header HTTP ricevuti dal server
|-
| nowrap | <
| Restituisce il valore dell'header HTTP specificato
|-
| nowrap valign="top" | <
|Specifica il metodo, l'URL
Il parametro metodo può assumere valore di "GET", "POST", oppure "PUT" ("GET" è utilizzato
Il parametro URL può essere sia relativo che assoluto.
Il parametro "async" specifica se la richiesta deve essere gestita in modo asincrono oppure no
|-
| <
| Invia la richiesta
|-
| nowrap | <
| Aggiunge la coppia chiave/valore
|}
== Attributi ==
{| class="wikitable" width="90%"
! Attributo
! Descrizione
|-
| <
| Gestore dell'evento lanciato ad ogni cambiamento di stato.
|-
| valign="top" | <
| Restituisce lo stato corrente dell'istanza di XMLHttpRequest:
0 = non inizializzato, 1 = aperto, 2 = richiesta inviata, 3 = risposta in ricezione e 4 = risposta ricevuta.
|-
| <
| Restituisce la risposta del server in formato stringa
|-
| <
| Restituisce la risposta del server come
|-
| <
| Restituisce il codice HTTP restituito dal server (per esempio [[Errore 404|404]] per "Not Found" e 200 per "OK").
|-
| <
| Restituisce lo <
|}
== 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 (browser)|Safari]] 1.2 e da [[Opera Software]] con [[Opera (browser)|Opera]] 8.0.
La maggior parte delle pagine ben progettate
Funzionalità simili sono incluse in [[Document Object Model|DOM]] Livello 3 "Load and Save", già raccomandazione del [[W3C]]. A [https://caniuse.com/xhr2 questo indirizzo] è possibile trovare le informazioni di compatibilità con tutti i principali browser.
Al momento (2018) è implementato in maniera esauriente in tutti i principali browser. (Safari, Chrome, FireFox, Opera)
==Problemi noti==▼
===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.▼
▲== Problemi noti ==
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]]▼
▲=== La cache di Microsoft Internet Explorer ===
▲Il browser di
▲Ci sono diversi modi per cercare di aggirare il problema. Il primo consiste
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" );▼
<syntaxhighlight lang="php">
Invece nelle Java Servlet:▼
header( "Expires: -1", false );
</syntaxhighlight>
▲Invece nelle Java [[Servlet]]:
response.setHeader( "Pragma", "no-cache" );▼
response.addHeader( "Cache-Control", "must-revalidate" );▼
<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''' quanto il caching risulta essere inappropriato e da evitare. Se questi metodi fossero usati indiscrinatamente, l'applicazione potrebbe risentirne in termini di prestazioni.
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
L'utilizzo di risposte XML e del metodo ''responseXML'' permette di far funzionare tutto correttamente con qualsiasi carattere [[UTF-8]].▼
▲===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.
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.
▲L'utilizzo di risposte XML e del metodo 'responseXML' permette di far funzionare tutto correttamente con qualsiasi carattere [[UTF-8]].
=== 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
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
==
<references/>
*[http://developer.apple.com/internet/webcontent/xmlhttpreq.html DHTML e XML: L'oggetto XMLHttpRequest]▼
*[http://www.mozilla.org/xmlextras/ XML Extras]▼
*[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/xmobjxmlhttprequest.asp IXMLHTTPRequest]▼
*[http://jibbering.com/2002/4/httprequest.html Usare l'oggetto XML HTTP Request]▼
*[http://www.w3.org/TR/DOM-Level-3-LS/ Raccomandazione W3C: DOM Livello 3 specifica "Load and Save"]▼
*[http://www.google.com/webhp?complete=1&hl=en Google Suggest]▼
== Collegamenti esterni ==
[[Categoria:XML]]▼
* {{Collegamenti esterni}}
▲*
▲*
* {{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ì }}
▲*
{{Interfacce web}}
{{Portale|internet|informatica}}
▲[[Categoria:XML]]
[[Categoria:Standard W3C]]
[[Categoria:Standard Internet]]
[[
|