2012-10-09 67 views
6

Duplicar posible:
Is Safari on iOS 6 caching $.ajax results?Prevenir IOS 6 de almacenamiento en caché Ajax Publicar demanda

que tienen una aplicación híbrida utilizando PhoneGap que funciona muy bien en Android y iOS. Pero cuando comencé a probar en iOS 6 me di cuenta de que no obtenía datos del servidor para la mayoría de mis llamadas ajax, sino que obtenía los datos en caché de las llamadas ajax anteriores.

Hasta ahora me han tratado las siguientes opciones para desactivar la caché -

  1. Incluir una marca de tiempo como parámetro de cadena de consulta
  2. $.ajaxSetup({ cache: false });
  3. Dentro de la llamada AJAX no-cache = true
  4. $.ajaxPrefilter(function (options, originalOptions, jqXHR) { options.data = jQuery.param($.extend(originalOptions.data||{}, { timeStamp: new Date().getTime() })); });

Pero ninguno de estos parece estar funcionando. Invoco las clases de acción Java de mis llamadas ajax. ¿Tendrá algo que ver con la razón por la cual los métodos enumerados arriba están fallando?

Respuesta

4

De here

cómo solucionarlo: Hay varios métodos para prevenir el almacenamiento en caché de las solicitudes. El método recomendado es agregar un encabezado sin memoria caché.

Así es como se hace.

jQuery:

Comprobar para iOS 6.0 y una cabecera de set Ajax como este.

$.ajaxSetup({ cache: false }); 

ZeptoJS:

Verificar para iOS 6.0 y Ajax Conjunto de la cabecera de esta manera.

$.ajax({ 
type: 'POST', 
headers : { "cache-control": "no-cache" }, 
url : , 
data:, 
dataType : 'json', 
success : function(responseText) {…} 

lado del servidor

Java:

httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 

Asegúrese de añadir esta en la parte superior de la página antes de que los datos se envían al cliente.

.NET

Response.Cache.SetNoStore(); 

O

Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); 

PHP

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1. 
header('Pragma: no-cache'); // HTTP 1.0.