No sé si os habeis fijado que en la mayoría de sitios que usan Ajax en sus peticiones lo acompañan de un parametro aleatório con el fin de evitar que se cacheen las llamadas.
Internet Explorer es muy famoso por cachear el contenido de páginas web volviendo locos a los desarrolladores web intentando corregir problemas con el botón back, o con ficheros Javascript que parece que se cargan cuando y como quieren.
Por ello hemos de ser nosotros los que jugemos con ventaja adaptando nuestros scripts para evitar estos problemas. Una solución es usar un contador aleatorio (random) que pasado como parametro hace que el navegador interprete una llamada nueva.
Una buena forma de conseguir un valor aleatorio o diferente en cada petición es usar el objeto Date() para conseguir el timestamp, osea el tiempo en segundos, de esta forma nos aseguramos que al menos, cada segundo será diferente.
var date = new Date();
var timestamp = date.getTime();
createXMLHttpRequest();
//var timestamp = Math.random() // Aleatorio por Math()
xmlHttp.onreadystatechange = handleMessages;
xmlHttp.open("GET","script.php?time="+timestamp,true);
xmlHttp.send(null);
Para curarnos en salud, añadiremos unas cabeceras a los scripts del servidor en las que dejemos más que claro que estamos indicando que esta página no debe cachearse nunca. En PHP usamos la función header() para conseguirlo.
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header( "Last-Modified: " . gmdate( “D, d M Y H:i:s" ) . " GMT" );
header( "Cache-Control: no-cache, must-revalidate" );
header( "Pragma: no-cache" );




8 comentarios, 0 referencias
+
#