Depuis la mise à niveau vers iOS 6, nous voyons la vue Web de Safari prendre la liberté de mettre en cache les $.ajaxappels. C'est dans le contexte d'une application PhoneGap donc elle utilise Safari WebView. Nos $.ajaxappels sont des POSTméthodes et nous avons mis le cache sur false {cache:false}, mais cela se produit toujours. Nous avons essayé d'ajouter manuellement un TimeStampen-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 TimeStampparamè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!