Estoy jugando con ASP.net MVC y JQuery en este momento. Me he encontrado con un comportamiento que no parece tener sentido.
Estoy llamando a la $.getJSON
función de JQuery para completar algunos div. El evento se activa en el $(document).ready
evento. Esto funciona perfectamente.
Hay un pequeño AJAX.BeginForm
que agrega otro valor para usar al completar los divs. Llama a la función remota correctamente y, si tiene éxito, llama a la función javascript original para volver a llenar los divs.
Aquí está la parte extraña: en FireFox y Chrome, todo funciona. PERO en IE8 (Beta) esta segunda llamada al script Div (que llama a la función $ .getJSON) obtiene datos en caché y no pregunta al servidor.
Espero que esta pregunta tenga sentido: En pocas palabras: ¿Por qué se $.getJSON
obtienen datos almacenados en caché? ¿Y por qué solo afecta a IE8?
fuente
Respuestas:
Solo para informarle, Firefox y Chrome consideran que todas las solicitudes de Ajax no se pueden almacenar en caché. IE (todas las versiones) trata la llamada Ajax como cualquier otra solicitud web. Por eso ves este comportamiento.
Cómo forzar a IE a descargar datos en cada solicitud:
Código:
fuente
Así es como funcionó para mí ...
fuente
$.ajaxSetup({ cache: true });
justo después delgetJSON()
y no en la devolución de llamada.Gracias Kent por tu respuesta. Usando $ .ajax ('{cache: no}'); funcionó perfectamente. [editar]
O al menos pensé que sí. Parece que jquery $ .getJSON no está leyendo ningún cambio realizado en el objeto $ .ajax.
La solución que terminó funcionando fue agregar un nuevo parámetro manualmente
la resolución de la fecha es solo al minuto; lo que significa que esta solución todavía se almacena en caché durante un minuto. Esto es aceptable para mis propósitos.
fuente
Math.Random()
podría usar resistente , sus resultados serán desconocidos y es posible que obtenga el mismo número dos veces seguidas (o más). el usonew Date().getTime()
se asegurará de que nunca se repita. (a menos que pueda retroceder en el tiempo;))Resolví este mismo problema colocando el siguiente atributo en la Acción en el Controlador:
fuente
Si está utilizando ASP.net MVC, considere agregar un método de extensión para implementar fácilmente sin almacenamiento en caché como este:
fuente
Es posible que deba enviar un eliminador de caché.
Recomendaría usar $ .ajax ({cache: no}) por si acaso (agrega un sufijo aleatorio a la solicitud de obtención)
(Tiendo a usar $ .ajax en todas partes estos días, más sintonizable)
fuente
¿Listo para LA respuesta?
http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson
Entonces, solo agrega
al comienzo de su guión y ¡BANG, funciona!
fuente