Depuis la mise à niveau vers iOS 6, nous voyons la vue Web de Safari prendre la liberté de mettre en cache les $.ajax
appels. C'est dans le contexte d'une application PhoneGap donc elle utilise Safari WebView. Nos $.ajax
appels sont des POST
méthodes et nous avons mis le cache sur false {cache:false}
, mais cela se produit toujours. Nous avons essayé d'ajouter manuellement un TimeStamp
en-tête mais cela n'a pas aidé.
Nous avons fait plus de recherches et avons découvert que Safari ne renvoie que les résultats mis en cache pour les services Web qui ont une signature de fonction qui est statique et ne change pas d'un appel à l'autre. Par exemple, imaginez une fonction appelée quelque chose comme:
getNewRecordID(intRecordType)
Cette fonction reçoit les mêmes paramètres d'entrée encore et encore, mais les données qu'elle renvoie doivent être différentes à chaque fois.
Doit être dans la hâte d'Apple pour que iOS 6 avance de manière impressionnante, ils sont trop satisfaits des paramètres de cache. Quelqu'un d'autre a-t-il vu ce comportement sur iOS 6? Si oui, quelle en est exactement la cause?
La solution de contournement que nous avons trouvée consistait à modifier la signature de la fonction pour qu'elle ressemble à ceci:
getNewRecordID(intRecordType, strTimestamp)
puis passez toujours un TimeStamp
paramètre également, et jetez simplement cette valeur du côté serveur. Cela fonctionne autour du problème. J'espère que cela aide une autre pauvre âme qui passe 15 heures sur cette question comme moi!