setInterval e Internet Explorer

E’ risaputo che Internet Explorer è il browser più problematico e, ahimè (per noi programmatori), il più diffuso. CSS, javascript e chi più ne ha più ne metta.
Oggi ho riscontrato un problema molto grave su una funzione in javascript importante: setInterval.
Questa funzione, utilizzata insieme ad AJAX, permette di inviare e ricevere in modo asincrono dei dati da un’altra pagina senza bisogno di ricaricare la pagina corrente.
Con IE però non funziona. Il problema è che non ricarica la pagina esterna, quindi i valori rimangono quelli del primo caricamento. Se, per esempio, si chiede l’ora attuale, al primo caricamento viene inviata la richiesta alla pagina esterna la quale risponde con l’ora corrente. Tramite la funzione setInterval si fa ripetere la richiesta alla pagina esterna la quale procurerà l’ora ogni tot secondi (a discrezione del programmatore, 1000 = 1 secondo) e così via. Con IE il secondo passaggio non viene effettuato.
Il problema risiede nel fatto che Internet Explorer non ritiene necessario inviare la richiesta perché il file non risulta differente dalla richiesta precedente. Ma a noi serve inviarli comunque e per questo basta un semplice codice:

<script type="text/javascript">
function sndReq() {
http.open('get', 'paginaesterna.php?ck=' + (new Date()).getTime(), true);
http.onreadystatechange = handleResponse;
http.send(null);
}
</script>

La riga che ci interessa è la terza:

 http.open('get', 'paginaesterna.php?ck=' + (new Date()).getTime(), true);

In questa riga diciamo al browser di inviare dei dati tramite get alla pagina ‘paginaesterna.php’. La variabile ‘ck’ permette di avere una chiamata unica per ogni richiesta, in quanto la variabile avrà data e ora corrente, che sarà differente sempre (quindi chiamata unica).

Annunci

, , ,

  1. Lascia un commento

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: