IE qui joue à cache cache avec l’ajax
Oui je sais encore un nouveau billet sans le nouveau thème. Mais il est bien fini à 90%. Il manque quelques tests et un petit module qui me tient à coeur.
Bref, en attendant, pas de raison que je ne publie pas! Voici donc une mini astuce, sur un problème rencontré cette semaine, qui m’aura un peu usé, surtout quand on voit la solution finale.
On va donc parler de IE et de l’AJAX.
Commençons par poser le décor comme d’habitude. Quand on fait de l’AJAX avec symfony, il n’est pas rare d’essayer de le faire non intrusif (c’est même conseillé, mais ça dépend si le site a un intérêt à fonctionner sans javascript), et donc de rendre une même action symfony différemment selon qu’on l’attaque en normal ou en AJAX.
Pour cela, on utilise donc un code proche de celui-ci:
if($request->isXmlHttpRequest()) { return $this->renderPartial('panier/widget'); }
Au final pour le navigateur, la requête reste la même. Demandez donc maintenant à un navigateur obsolète du genre IE de gérer se genre de mécanisme.
Vous vous attendez au résultat, et je confirme pour vous. De façon non systématique, mais il arrive que si vous chargez d’abord l’action par un appel GET classique et que vous exécuez ensuite une requête ajax sur cette même action, IE a tendance à vous renvoyer la page entière et non pas seulement notre partial comme on l’a défini.
On peut penser que le souci vient de nos entêtes non détectées, mais on s’aperçoit que d’autres requêtes AJAX fonctionne… Et là, on essaye une petite ligne jquery avant notre requête AJAX:
$.ajaxSetup ({ cache: false });
Et par magie, IE arrête son jeu de cache cache!
C’est tout bête, mais il fallait le savoir.
Maintenant, je le sais, et vous aussi ;)
Tags: AJAX, cache, IE6, javascript
3 Réponses
Laisser un message

Très intéressant… IE est définitivement un drôle de bonhomme !
Tellement drôle, que le prochain thème pourrait ne pas être IE compliant, vu ses stats sur mon blog ^^
Merci beaucoup pour cette aide qui m’a été utile !