Las herramientas de desarrollo de YSlow y Chrome le avisarán si usa solicitudes POST para AJAX; en general, GET debería ser el método preferido a menos que realmente necesite POST.
Puede deshabilitar el almacenamiento en caché globalmente $.ajaxSetup(), por ejemplo:
$.ajaxSetup({ cache:false});
Esto agrega una marca de tiempo a la cadena de consulta al realizar la solicitud. Para desactivar el caché para una $.ajax()llamada en particular , configúrelo cache: falselocalmente, así:
Ojalá hubiera visto este elemento de configuración global antes. Simplemente me salvó de tener que actualizar docenas de llamadas individuales.
James Skemp
2
Sé que esta es una respuesta anterior, solo me pregunto si esto afecta a todas las llamadas ajax como (ajax, get y post) o solo a llamadas específicas de ajax.
Abultado
66
@Lumpy, de acuerdo con la documentación de jQuery.ajax () , cache: falsesolo funcionará correctamente con las solicitudes HEAD y GET. Además, si se establece cache: falseen $.ajaxSetup, según jQuery.ajaxSetup documentación () , lo hará "valores predeterminados para futuras peticiones Ajax". Entonces sí, deshabilitará el caché para todas las futuras solicitudes HEAD y GET AJAX.
John Washam
11
Una advertencia: esto agrega "? _ = Somenumber" a su URL. Asegúrese de que su back-end pueda ignorar el "_" en los parámetros de consulta de la URL.
44
+1 para cache: false. Desactivar el almacenamiento en caché a nivel mundial parece excesivo, pero tener control por solicitud es perfecto. Gracias
Gone Coding
21
Si establece parámetros únicos, entonces el caché no funciona, por ejemplo:
$.ajax({
url :"my_url",
data :{'uniq_param':(newDate()).getTime(),//other data}});
Eso es lo que el cacheparámetro ya hace detrás de escena.
Jose Rui Santos
El código ajaxSetup de arriba no funcionó para mí, no pasó mucho tiempo descubriendo por qué. Las variables globales son malas, y a veces quieres almacenar en caché. Esta respuesta es la mejor en mi opinión.
bladefist
@bladefist parece que has tenido el mismo problema que yo. ¿Sabes si hay otras opciones además de cambiar los datos para que IE deje de almacenar en caché? La razón por la que pregunto es porque mis solicitudes en realidad no utilizan 'datos' y todos los datos van junto con la URL.
badri
1
En realidad, esto es seguramente lo que la memoria caché debe hacer detrás de escena según esta información de: api.jquery.com/jquery.ajax caché (predeterminado: verdadero, falso para dataType 'script' y 'jsonp') Tipo: booleano Si está configurado falso, obligará a las páginas solicitadas a no ser almacenadas en caché por el navegador. Nota: Establecer caché en falso solo funcionará correctamente con solicitudes HEAD y GET. Funciona agregando "_ = {marca de tiempo}" a los parámetros GET.
badri
@bladefist Dice claramente que agregará una marca de tiempo a los parámetros GET. así que me pregunto por qué el código provisto por Koss funciona para usted y deshabilitar la caché local o global no.
badri
12
Cache-Control:no-cache,no-store
Estos dos valores de encabezado se pueden combinar para obtener el efecto requerido en IE y Firefox
El problema es que IE no siempre escucha esto, desafortunadamente :)
Nick Craver
1
@ Nick, ¿está seguro? No probé este control de caché. ¿Jquery Ajax chache funciona en todos los navegadores?
77
Se debe trabajar en todos los navegadores, sí ... pero a veces simplemente le gusta IE para almacenar en caché el infierno de cosas
Nick Craver
@Nick: configuré el caché de ajax en falso, pero el mensaje de éxito de ajax no llegó en IE y tampoco en FF. ¿Pueden verificar mi código? ¿Mi código está mal? Gracias var ajaxfile = base + "index.php / msc / popup_view /" + obj + "/" + id + "/" + no_tab; $ .ajax ({type: "GET", url: ajaxfile, // contentType: "application / json; charset = utf-8", cache: false, success: function (msg) {$ ("# popup"). html (mensaje);}});
SABU
Acabo de confirmar que IE11 ignora este encabezado. Chrome también arrojó un error CORS.
La idea es agregar un parámetro a su consulta ajax que contenga, por ejemplo, la fecha actual una hora, para que el navegador no pueda almacenarlo en caché.
Respuestas:
Puede deshabilitar el almacenamiento en caché globalmente
$.ajaxSetup()
, por ejemplo:Esto agrega una marca de tiempo a la cadena de consulta al realizar la solicitud. Para desactivar el caché para una
$.ajax()
llamada en particular , configúrelocache: false
localmente, así:fuente
cache: false
solo funcionará correctamente con las solicitudes HEAD y GET. Además, si se establececache: false
en$.ajaxSetup
, según jQuery.ajaxSetup documentación () , lo hará "valores predeterminados para futuras peticiones Ajax". Entonces sí, deshabilitará el caché para todas las futuras solicitudes HEAD y GET AJAX.cache: false
. Desactivar el almacenamiento en caché a nivel mundial parece excesivo, pero tener control por solicitud es perfecto. GraciasSi establece parámetros únicos, entonces el caché no funciona, por ejemplo:
fuente
cache
parámetro ya hace detrás de escena.Estos dos valores de encabezado se pueden combinar para obtener el efecto requerido en IE y Firefox
fuente
Aquí hay una propuesta de respuesta:
http://www.greenvilleweb.us/how-to-web-design/problem-with-ie-9-caching-ajax-get-request/
La idea es agregar un parámetro a su consulta ajax que contenga, por ejemplo, la fecha actual una hora, para que el navegador no pueda almacenarlo en caché.
Echa un vistazo al enlace, está bien explicado.
fuente
cache
parámetro ya hace detrás de escena.puedes definirlo así:
o así :
Espero eso ayude
fuente
Esta es una publicación antigua, pero si IE te está dando problemas. Cambie sus solicitudes GET a POST e IE ya no las almacenará en caché.
Pasé demasiado tiempo resolviendo esto de la manera difícil. Espero eso ayude.
fuente
cache:false
caso por caso es el camino a seguir.