jquery - que - ¿qué es datos caché en un celular?
$.getJSON devuelve datos en caché en IE8 (7)
Así es como funcionó para mí ...
$.ajaxSetup({ cache: false });
$.getJSON("/MyQueryUrl",function(data,item) {
// do stuff with callback data
$.ajaxSetup({ cache: true });
});
Estoy jugando con ASP.net MVC y JQuery en este momento. Me he encontrado con un comportamiento que no parece tener sentido.
$.getJSON
función $.getJSON
JQuery para $.getJSON
algunos div. El evento se desencadena en el evento $(document).ready
. Esto funciona perfectamente
Hay un pequeño AJAX.BeginForm
que agrega otro valor para ser utilizado al poblar los divs. Llama a la función remota correctamente y luego de un é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 a la secuencia de comandos Div (que llama a la función $ .getJSON) obtiene datos en caché y no se lo pide al servidor.
Espero que esta pregunta tenga sentido: en $.getJSON
: ¿Por qué $.getJSON
obtiene datos en caché? ¿Y por qué solo está afectando a IE8?
Es posible que deba enviar un interruptor de memoria caché.
Recomendaría usar $ .ajax ({cache: no}) por si acaso (agrega un sufijo aleatorio a la solicitud get)
(Tiendo a usar $ .ajax en todos lados estos días, más sintonizable)
Gracias Kent por tu respuesta. Usando $ .ajax (''{caché: no}''); funcionó perfectamente [editar]
O al menos yo pensé que sí. Parece que jquery $ .getJSON no lee ningún cambio realizado en el objeto $ .ajax.
La solución que terminó funcionando fue agregar un nuevo parámetro manualmente
var noCache = Date();
$.getJSON("/somepage/someaction", { "noCache": noCache }, Callback);
la resolución de la fecha es solo por minuto; lo que significa que esta solución todavía almacena en caché hasta por un minuto. Esto es aceptable para mis propósitos.
Listo para la respuesta?
http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson
Entonces, solo agrega
jQuery.support.cors = true;
al comienzo de tu script y ¡BANG funciona!
Para hacerte saber, Firefox y Chrome consideran que todas las solicitudes de Ajax no son de caché. IE (todas las versiones) trata la llamada Ajax como otra solicitud web. Es por eso que ves este comportamiento.
Cómo forzar a IE a descargar datos en cada solicitud:
- Como dijiste, usa la opción ''caché'' o ''nocache'' en JQuery
- Agregue un parámetro aleatorio a la solicitud (feo, pero funciona :))
- Del lado del servidor, configure la capacidad de caché (por ejemplo, utilizando un atributo, consulte a continuación)
Código:
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
}
}
Resolví este mismo problema al colocar el siguiente atributo en la Acción en el Controlador:
[OutputCache(Duration = 0, VaryByParam = "None")]
Si está utilizando ASP.net MVC, considere agregar un método de extensión para implementar fácilmente el almacenamiento en caché de esta manera:
public static void NoCache(this HttpResponse Response)
{
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetValidUntilExpires(false);
Response.Expires = -1;
Response.ExpiresAbsolute = DateTime.MinValue;
Response.AddHeader("Cache-Control", "no-cache");
Response.AddHeader("Pragma", "no-cache");
}