2009-06-04 15 views
9

Cómo evitar que los navegadores guarden en caché los resultados de Ajax? He activado un evento y el script de Ajax. Los resultados solo se muestran cuando los datos de los navegadores se han borrado.Cómo evitar el almacenamiento en caché de los resultados de Ajax/javascript en los navegadores?

Probado en IE6 y Firefox 3.0.10

+2

realidad, este es un problema bastante bien documentado. Estoy seguro de que puedes encontrar una respuesta muy completa si buscas en Google. – jrharshath

Respuesta

11

Añadir una cadena de consulta al azar a la URL que está enviando.

E.g. Si la solicitud se envía al Ajax "http://www.xyz.com/a" a continuación, añadir una cadena aleatoria al final: "http://www.xyz.com/a?q=39058459ieutm39"

+3

... y se puede generar la cadena aleatoria en javascript, por ejemplo, así: Math.floor (Math.random() * 1000000) – Manne

+2

Esta solución tiene un grave inconveniente: se llena la memoria caché si recupera muchos archivos. En mi caso, quiero conservar el caché para su uso sin conexión, por lo que no quiero llenarlo con versiones anteriores de la solicitud. –

4

Hay dos técnicas para esto que yo sepa.

  • Agregue un tipo de cadena de consulta a la URL de solicitud de AJAX para que sea siempre única. Una marca de tiempo de milisegundos (tal vez combinado con un valor aleatorio) es bueno para este cabeceras
  • Conjunto de control de caché HTTP en la respuesta AJAX para que el navegador no almacena en caché que
13

La URL aleatoria funciona, pero es un poco de un truco. HTTP tiene soluciones integradas que deberían funcionar. Intente utilizar la solución indicated here. Básicamente, establecer los encabezados:

"Pragma":   "no-cache", 
"Cache-Control":  "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", 
"Expires":   0, 
"Last-Modified":  new Date(0), // January 1, 1970 
"If-Modified-Since": new Date(0) 
+0

Perfecto, gracias. (Aunque parece extraño que los cabezales están situados en el cliente y no en la respuesta del servidor!) –

+0

me sale un error al intentar implementar la solución: 'petición pragma campo de cabecera no está permitido por el "acceso-control- allow-headers "'. Alguna idea de como evitar esto? Look: http://stackoverflow.com/questions/23048184/xmlhttprequest-with-no-cache-request-header-is-not-allowed –

+0

Una llamada que estaba haciendo fallaría cuando pasa un número aleatorio a través de la cadena de consulta. No construí el servicio, pero parecía que intentaba interpretar cada parámetro. Esta fue la solución perfecta, gracias! – hack3rfx

8

He utilizado el jQuery {cache: false} método y funcionó como un encanto.

El ejemplo de código completo es la siguiente:

$.ajaxSetup({cache: false}); 
+0

esto es genial! cadena de consulta aleatoria no funciona. – Brent81

+0

¡Y para mí, solo una cuerda aleatoria funcionó! – user984003

+0

ajaxSetup funciona solo para llamadas ajax. Para otras llamadas JS, puede que necesite agregar el hack de cadena aleatorio querystring. –

Cuestiones relacionadas