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);