2009-09-13 3 views
0

J'ai une application Flex qui utilise une interface riche. L'utilisateur peut créer des données et les afficher instantanément dans une liste de données qu'il a créées. Les données sont stockées dans une base de données MySQL à l'aide des requêtes POST HTTPService de l'application Flex et des formulaires PHP pour gérer les données côté serveur. Par souci d'explication, disons que les données sont simplement une question. Dans Safari et Firefox, les données s'affichent instantanément comme elles sont censées être ajoutées à la base de données, puis appelées pour recharger. Cependant, lorsque vous utilisez IE, les données sont ajoutées à la base de données, mais elles n'apparaissent pas immédiatement comme elles le devraient. Parfois, il faut que l'utilisateur vider le cache et d'autres fois, ils peuvent avoir besoin de quitter IE et le redémarrer. Cependant, toutes les fois il est ajouté à la base de données. Le formulaire PHP utilise une simple instruction MySQL SELECT pour obtenir les données de la base de données.Flex et le code PHP avec cache IE ou problème POST

Y a-t-il des problèmes connus avec IE mettant en cache ces données pendant un certain temps? Y at-il un moyen de le faire ne pas le faire?

Répondre

1

J'ai récemment utilisé un outil appelé Fiddler, qui vous permet de surveiller le trafic Web sur votre système et même de modifier les demandes et les réponses. Dans votre cas, vous aurez besoin de l'installer et de le configurer comme reverse proxy pour que votre application flexible communique avec la couche PHP.

Une fois configuré, vous pouvez plus facilement suivre ce qui se passe avec vos données. (J'ai trouvé un plugin JSON pour moi qui me permet de voir la structure JSON comme un arbre, mais il supporte nativement une vue XML)

Une fois que vous aurez mieux compris et expliqué le trafic, je pourrais peut-être vous aider . Cela ne ressemble pas à un problème HTTP 304. Confirmez que les données sont renvoyées à IE.

+0

Je sais que c'est retourné car elle apparaîtra parfois après quelques ou un redémarrage rafraîchissement de IE. Je sais qu'il est ajouté à la base de données la première fois parce que je le regarde dans MySQL. Est-ce que l'ajout d'un horodatage à mon appel de formulaire PHP aiderait à résoudre ce problème? – joshholat

+0

Vous avez besoin de quelque chose pour confirmer que les données sont récupérées par IE lorsque vous vous attendez à ce qu'il le soit. Vous devez savoir ce qui se passe qui nécessite IE pour être redémarré. Cela ressemble à un problème de cache, mais l'installation de quelque chose comme Fiddler vous aidera à voir les différences entre les navigateurs. Mais vous pouvez également essayer de regarder les journaux du serveur Web et de comparer les réponses entre différents navigateurs. Vous devez essayer d'éliminer les parties qui pourraient être le problème. DB, PHP, serveur Web, navigateur, Flex .... – Glenn

+0

Il est presque certainement un problème d'en-tête de cache; vous devez vous assurer que vos pages HTML sont livrées avec des en-têtes appropriés qui indiquent que les copies mises en cache ne peuvent pas être réutilisées. Internet Explorer peut mettre en cache et réutiliser la réponse à une requête GET si le serveur n'envoie aucun en-tête interdisant la mise en cache. Solutions de contournement: utilisez la méthode POST, une chaîne de requête aléatoire ou (mieux) configurez le serveur pour envoyer des directives de cache appropriées. Remarque: L'utilisation d'une chaîne de requête non aléatoire seule n'est pas suffisante pour empêcher la mise en cache. Voir www.fiddler2.com/redir/?id=httpperf – EricLaw

0

IE est connu pour la mise en cache d'éléments tels que les requêtes ajax. Un bâton général - sur les demandes importantes qui ne devrait pas être mis en mémoire cache, assurez-vous que l'en-tête pragma est no-cache ....

donc en appel php:

header("Pragma: no-cache"); 

avant que le contenu est rendu/retourné au navigateur. Vous pouvez également ajouter un horodatage en tant que paramètre supplémentaire à une URL ajax. Les deux approches signifient que tous les services de mise en cache intermédiaires seront éliminés (c'est-à-dire redis, proxy squid, etc.), ce qui pourrait affecter la charge de votre serveur.

A plus dans l'interprétation de la profondeur se trouve ici: http://thecodeabode.blogspot.com/2010/10/cache-busting-ajax-requests-in-ie.html