2012-06-15 19 views
7

He encontrado un error extraño en Chrome 19. Implementé un sitio web completo AJAX (cada enlace no externo se abre mediante solicitud AJAX) con soporte pushState. Transmitir los fragmentos de HTML en AJAX a través del formato JSON.Error Ajax + pushState en Chrome

Cuando salgo de mi sitio a través de un enlace externo y vuelvo, Chrome representa los datos almacenados en caché para esa URL; el problema es que almacena en caché el contenido JSON y lo muestra, en lugar de la página web completa.

Ésta es reproducible mediante estos pasos (ACTUALIZACIÓN: He quitado la funcionalidad de AJAX en mi sitio web, desde entonces, por lo que este error no dejan de aparecer):

  1. abierto http://beta.mirtes.cz/
  2. Haga clic en la segunda fecha enlace (16. 6. 2012 junto a "Todo comenzó con un extraño correo electrónico"). Esta página (se encuentra ahora en http://beta.mirtes.cz/it-all-began-with-a-strange-e-mail) se carga a través de AJAX.
  3. Haga clic en "Todo comenzó con un correo electrónico extraño". Usted es redirigido a un sitio web externo.
  4. Haga clic en "Atrás" en Chrome después de que la página esté completamente cargada.

Intento enviar todas las respuestas AJAX con Cache-Control: no-caché, pero sin ningún efecto.

Firefox 12 funciona bien.

Respuesta

7

Vine con una solución alternativa: realizo una solicitud AJAX con un parámetro GET ficticio adicional -? Ajax = 1. De esta forma, el navegador puede reconocer la diferencia entre el contenido HTML habitual y JSON. No tiene ningún impacto en el usuario, el parámetro es visible solo en Firebug.

+0

¿Puede explicarnos un poco más lo que hizo y cómo solucionó el problema? – Ryan

+0

Estoy haciendo todas las solicitudes AJAX con parámetro GET adicional, en este caso, ajax = 1. Este parámetro es invisible para el usuario, ya que se realiza solo en segundo plano. –

+0

De esta forma, el navegador puede saber la diferencia entre el contenido HTML completo y el contenido JSON AJAX porque las URL son diferentes. Y por lo tanto, no muestra el contenido JSON en caché donde no debería. Puede verificar la funcionalidad en mi página de inicio en http://ondrej.mirtes.cz/. –