Cette question montre cependant une vue d'ensemble de toutes les solutions possibles lorsqu'elle est confrontée à un problème de mise en cache. P> Je construis une demande sur laquelle il existe des formes, peuplées de valeurs à partir d'une base de données.
L'utilisateur peut modifier les valeurs d'entrée du formulaire. Après avoir soumis (non via AJAX), les nouvelles valeurs sont enregistrées dans la base de données et le même formulaire s'affiche à nouveau, cette fois contenant les nouvelles valeurs, chargées directement de la base de données. Toutefois: mon navigateur (chrome v27.0.1453.116m sous Windows 7) cache les anciennes valeurs. Les nouvelles valeurs ne sont indiquées que lorsque je navigue à nouveau sur ma page. P> Voici un aperçu avec des solutions proposées: Faites de la page pour dire au navigateur de ne pas cacher / conserver les valeurs d'entrée p> Quelles sont mes options? Si possible, je voudrais éviter de poster mon formulaire de manière asynchrone. Il commence à regarder comme si je n'ai pas d'autre choix. Toute entrée est appréciée. P> Veuillez noter que ce comportement apparaît également dans d'autres navigateurs, tels que IE10. P> Mon titre de page est identique à la valeur de l'une des entrées de mon Formulaire et ne change pas non plus à la soumission d'une nouvelle valeur, IMHO, nous pouvons déterminer que ceci est un problème de mise en cache. p> Le plug-in du développeur Web de Google Chromes me montre les en-têtes suivants: P>
Pragma: no-cache
Date: Sun, 30 Jun 2013 09:44:12 GMT
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Apache
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Keep-Alive: timeout=15, max=100
Expires: Thu, 19 Nov 1981 08:52:00 GMT
200 OK
autocomplete = "OFF" code> sur la balise de formulaire: Cela ne semble pas avoir d'effet. LI>
autocomplete = "OFF" code> sur les balises d'entrée individuelles: cela ne donne pas non plus de résultats, même en combinaison avec la solution ci-dessus li>
<form id="edit_form" class="form" action="http://the.same.url/" method="post">
<input type="text" name="example" value="<?php echo $value_from_database; ?>" />
</form>
5 Réponses :
la première réponse à Cette question suggère Pour ajouter les en-têtes suivants afin de désactiver la mise en cache du navigateur:
<?php header("Expires: Tue, 01 Jan 2000 00:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); ?>
Assez étrangement, cela ne résout pas non plus le problème. Dans le même temps, j'ai essayé votre solution uniquement avec des tags méta ... toute autre idée?
Veuillez noter que je peux clairement voir à partir des en-têtes de réponse que ces paramètres sont actifs.
Je pense que vous avez juste oublié d'echo $ value_from_database code>, qui, à son tour, retourne par défaut à la valeur mise en cache du navigateur. Vous devriez avoir l'élément d'entrée suivant à la place:
<input type="text" name="example" value="<?php echo $value_from_database; ?>">
Désolé, c'était une erreur dans mon pseudocode. Il me défait aussi pourquoi ma cache de page est toujours chargée. Je cherchais des conflits dans mon fichier .htaccess, mais je n'ai trouvé aucun. Très étrange en effet. Espérons qu'une réponse apparaîtra.
ne pouvez-vous pas prendre: et le changer à: p> qui dit: voir si j'ai déjà une variable Dans le tableau Vous devrez peut-être définir des variables de session ( $ _ POST code> après le formulaire soumis. Si je le fais, utilisez cette valeur, sinon, tirez de db. P>
$ _ session ['ex'] = $ _POST ['exemple'] code>), et faites les modifications au code ci-dessus p> p>
Bonjour, merci pour votre réponse. Pourriez-vous élaborer sur votre remarque concernant «$ _Session ['ex'] '?
Parfois, le tableau $ _ POST CODE> est gonflé, alors prenez les données post-post et la mettant en une variable de session qui l'emporte-t-elle.
Mon titre de page, qui est également tiré de la base de données (nom d'utilisateur), ne change pas également lors de la modification de la valeur dans l'entrée correspondante. Par conséquent, j'ai tendance à penser que c'est une question de mise en cache.
Soumettre arrive via jQuery .Submit () sur soumettre, la même page est chargée. Toutes les pages de mon application résident dans Index.php. Il y a une vérification de l'URL via .htaccess.
Cela change complètement la question. Il semble que c'est une jQuery pas php. Vous n'aborquez pas correctement les valeurs via JS
Les valeurs ne sont pas passées via JS. C'est un poste de formulaire HTTP régulier, seule la soumission est déclenchée via JQuery. La page actualisée sur Soumettre. Des points de vue sur cela?
Je viens d'expérimenter du formulaire manuel Soumettre: aucun changement, semble-t-il.
J'ai le sentiment que votre serveur envoie Je pense que quelque chose comme ça devrait faire (mais il n'est pas testé). Il devrait supprimer l'en-tête 304: non modifié code> au lieu des données que vous envoyez normalement. Cette question pourrait vous aider si vous utilisez Apache.
IF-Modified-depuis CODE> pour chaque demande qui demande un fichier PHP, forçant l'application à envoyer du contenu au lieu d'un statut code> non modifié code>. < / p>
@maartenmachiels Le 200 OK signifie que le serveur envoie des données au navigateur. Il envoie chaque en-tête possible pour empêcher la mise en cache, rend les données envoyées expirent quelque part dans le passé pour donner au navigateur une raison supplémentaire d'invalider le cache s'il est mis en cache. Soit il y a un bogue dans le navigateur qui permet d'utiliser le cache de toute façon, une extension de navigateur est en train de gâcher ou que le serveur envoie les mauvaises données. Le serveur pourrait avoir une sorte de cache, mais il semble étrange qu'il envoie n'importe quel cache si aucun si modifié - depuis code> en-tête existe. Je serais intéressé de voir le code PHP pertinent.
Après la reconstruction du scénario pour mettre en ligne ici, j'ai finalement compris le problème. C'était un cas d'ordre de l'ordre de l'ordre de code ... Mon Select (Pour remplir les champs de formulaire) a précédé ma mise à jour, ce qui permet de toujours afficher les anciennes valeurs. Lors de la rechargement de la page, bien sûr, les valeurs correctes indiquées: me faisant croire que c'était une question de cache! Merci de me pointer dans la bonne direction!
Vous pouvez modifier les attributs de nom des entrées par une chaîne aléatoire et les stocker dans une entrée cachée.
<form id="edit_form" class="form" action="http://the.same.url/" method="post"> <input type="text" name="saejfb27982" value="..." /> <input type="text" name="iuqde37we83" value="..." /> <input type="hidden" name="associativeArray" value='{"example":"saejfb27982","example2":"iuqde37we83"}'> </form>
+1 J'étais sur le point d'écrire la même chose. Une solution comme celle-ci devrait être la voie à suivre imho
Très bonne suggestion, merci. Le problème est que le formulaire est assez complexe, avec toutes sortes d'intrants et de wysiwygs ... En ce moment, je pense qu'il serait presque impossible de le faire avec toutes les intrants.
Une solution possible peut être de retour à URL avec une valeur aléatoire ajoutée à la fin de l'URL ... comme
? Nocache = 875138 code> qui peut être obtenu avec le
rand () code> fonctionner dans php ..
Merci, je vais l'enquêter immédiatement.
Après enquête, il ne semble avoir aucun effet. Merci quand même. As-tu d'autres idées?
Êtes-vous sûr qu'il est le navigateur et non le serveur qui met la page la page? Votre application envoie-t-elle un
en-tête code> non modifié?
C'est très étrange. Mon point de vue serait si un formulaire est à exemple.com/myform.php et vous soumettez à exemple.com/myform.php?rnd=23215234 qu'il n'y a pas de mise en cache de navigateur de la page. Je pense que vous avez un serveur mal configuré quelque part.
Ajoutez le code suivant à votre fichier php:
-> code> et inspecter la page avant et après la soumission. Si ce commentaire change, il s'agit d'un problème, mais un problème avec votre code lui-même.
Merci! Il y a une différence entre la date échoée avant et après la soumission. Très étrange! Mes valeurs sont correctement transmises par courrier et correctement enregistrées dans la base de données. Le problème n'apparaît que après la poste. Recharger la page après obtenir les bonnes valeurs. Cela pourrait-il être une fonctionnalité de navigateur?