2011-05-24 19 views
14

Hy!Json se almacena en caché incorrectamente

Mi JS está solicitando un JSON del controlador para editar un objeto existente, una lista desplegable poblada.

Luego, la Vista envía los valores reales de mi lista desplegable autosuggest, para últimamente el nuevo valor se compara con el anterior y se almacenan los nuevos valores.

Es como una lista de Personas. Cuando cargo la página, hay algunas personas en mi ddl y puedo agregar o eliminar personas.

Esta es mi controlador:

[HttpGet] 
    public JsonResult JSON(int order) 
    { 
     IEnumerable<Person> persons = dataServ.Envolvidos.GetPerson(order) 
     return this.Json(new { Result = persons }, JsonRequestBehavior.AllowGet); 
    } 

Y mi llamado JSON:

$.getJSON("/Order/JSON", { order: $("#Id").val() }, function (data) { 
    ... 
}); 

todo va bien, excepto por el punto de que POR EJEMPLO está almacenando en caché este JSON, y cuando envío los nuevos valores y vuelvo a editar la página nuevamente, los valores anteriores están allí en lugar de los nuevos. Pero los nuevos valores se almacenan en la base de datos, como debería ser.

Probé en Chrome y Firefox y después de editar y volver a editar, se hace una nueva llamada json y los nuevos valores están ahí, diferente de I.E.

¿Echo de menos algo? ¿Qué debo hacer con el resultado de JSON no se almacena en caché?

Respuesta

20

Esto deshabilita la caché para jQuery Ajax:

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

Tks hombre !!!! ¡realmente ayuda! – Thiago

+0

Ya sea que se guarde en caché o no, generalmente es mejor dejarlo hasta el servicio que sirve los datos, ya que sabe cuánto tiempo antes de que los datos estén desactualizados. Esta solución obligará a todos los clientes del servicio a poner esta línea en su código de cliente. Si eso no es aceptable, el servicio debe modificarse para incluir los encabezados apropiados en su respuesta, lo que indica a los clientes que no deben almacenar en caché. –

+4

@Gweebz. El caché del lado del servidor y del lado del servidor son bastante diferentes. Nadie está obligando a los clientes a nada en este caso. Simplemente ocurre que a los clientes de IE les gusta caché más agresivamente que otros clientes, por lo que IE necesita esta línea de código. El almacenamiento en caché del lado del servidor puede y debe configurarse independientemente de esta decisión. En cuanto a controlar el caché del lado del cliente con encabezados creados en el lado del servidor, no veo el lado positivo. Simplemente crearía un estrecho acoplamiento entre el servidor y el código del lado del cliente que usted mismo argumenta que es malo. – Milimetric

8

Creo que IE almacena en caché las solicitudes JSON de forma predeterminada, a diferencia de los otros navegadores. Tendrá que incluir manualmente los encabezados apropiados para indicarle a la respuesta que no se guarde en caché. Esto no perjudicará a los navegadores existentes que ya no tienen memoria caché, solo será más explícito.

+1

+1 Esta debe ser la respuesta correcta. La especificación HTTP para el almacenamiento en caché está orientada a cómo el origen quiere que su contenido se gestione en términos de almacenamiento en caché. Cambiarlo en javascript no cambiará la manera en que funcionan los proxies intermedios de caché. Por lo tanto, lo mejor que puede hacer es especificar los encabezados de no caché adecuados en el servidor para que funcione en todos los casos. –

Cuestiones relacionadas