Es cada vez más habitual encontrarse con páginas web, en las que se utiliza AJAX para realizar actualizaciones en la página mientras la vemos. Realizando distintas peticiones con JQuery (o alguna librería alternativa) y mostrando los datos recibidos dentro de la estructura inicial de la página.

Esto sin embargo puede presentar un problema en algunos navegadores. En la mayor parte, cargar la página, interactuar con el usuario, y posteriormente mostrarle los datos obtenidos desde el servidor es una tarea bastante sencilla y cada vez más realizada en cualquier desarrollo web. Sin embargo, podemos encontrarnos con ciertos problemas.

Cuando no todo funciona como esperamos…

En este caso, se trata de una página web en la cual podemos realizar comentarios de forma asincrona Lo enviaremos al servidor con AJAX y recibiremos el HTML necesario para mostrarlo. Luego el usuario puede continuar con la navegación normalmente por la página.

Sin embargo, nos encontramos con que si tras realizar el comentario, vamos a otra página, y posteriormente intentamos volver atrás utilizando el historial del navegador, en algunos casos el comentario no aparece… En Chrome todo funciona correctamente, al volver atrás el navegador parece que hace la petición al servidor y el comentario aparece en el listado. Sin embargo, en Internet Explorer esto no es así.

Cuando se trata de IE, realizamos el comentario, vamos a otra sección de la web, le damos al botón de atrás, y el navegador obtiene la página de la cache, por lo que el comentario no aparece al estar el HTML generado antes de haberse publicado.

Solucionando el problema

Tras ver lo que ocurre, y documentarse, está claro que Internet Explorer utiliza una cache, cargando una página obsoleta en la que no está el comentario publicado. Así que la solución parece sencilla, obligar a IE a que descargue de nuevo nuestra página, pudiendo de esta forma generarla en el servidor con el comentario introducido.

Para hacerlo, utilizaremos un sencillo JavaScript, el cual recargará la página si esta se ha cargado desde la cache.

Para controlar si la página se está cargando por primera vez, o se está realizando una carga desde la cache, añadiremos a nuestro HTML un campo oculto de formulario:

En este campo, guardaremos el timestamp cuando se carga la página desde el servidor. Si está vacío, lo rellenaremos con JavaScript, si tiene algún valor recargaremos la página ya que se estará cargando una versión anterior. El encargado de añadir esta funcionalidad es el siguiente código: De esta manera, conseguiremos obligar a los navegadores a que recarguen la página web cuando creamos que es necesario que obtengan una versión actualizada (como en este caso). Aunque no deberemos abusar de esta técnica, ya que de no ser necesario recargar la página, es más rápido y fluido para el usuario cargar la página desde la cache del navegador.