Je construis une application JavaScript unique et lorsque l'application commence, j'utilise un seul fichier JavaScript pour charger tous les autres fichiers dont j'ai besoin sur la volée. Lorsque je frappe Actualiser, Selon Firebug, ma page HTML ainsi que les pages JavaScript se chargeront avec une erreur 304 non modifiée et que mon JavaScript arrête de fonctionner.
Je comprends cela est dû à la mise en cache du navigateur, mais comment puis-je éviter cela? Je charge la page HTML initiale avec un seul appel de script P> puis continue à charger le reste de manière dynamique de ce script p> Je sais que Gmail utilise des cookies pour éviter cela. Est-ce que quelqu'un a une idée de savoir comment prendre cette approche? Devrais-je définir le cookie sur le serveur, puis vérifier avec JS sur chaque page charge / rafraîchir et utiliser quelque chose comme fenêtre.Location.refresh () si le cookie me dit que la page est chargée du cache? P> P >
8 Réponses :
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> Add this into your HTML HEAD.
Cela n'arrête pas le navigateur de la mise en cache et de la transmission de 304 erreurs non modifiées.
304 Non modifié est simplement une réponse "Vous devez avoir cette mise en cache", ce n'est pas une erreur.
La mise en cache est une importance importante pour des raisons de performance. Je vous recommanderais de passer un numéro de version dans votre chaîne de requête et avec chaque mise à jour, incrémentez le numéro de version. Cela obligera le navigateur à renvoyer la demande et il chargera du cache s'il a déjà la même version. P>
Vous devez définir script.src = scripts [chargé]; code> après em> Ajout du
OnReadyStatechange code> /
Onload code> gestionnaires. Sinon, l'événement allait tirer avant que les gestionnaires ne soient ajoutés, car la version mise en cache se charge instantanément. P>
Je suis d'accord avec toutes les autres réponses. 304 n'est pas une erreur et il y a de nombreuses raisons pour lesquelles ce comportement est correct.
qui étant dit, il y a un simple "hack" que vous pouvez utiliser. Joignez simplement un paramètre URL unique à l'appel JS. P>
var timestamp = +new Date; var url = "http://mysite.com/myfile.js?t=" + timestamp;
J'utilise cette approche dans mes utilitaires de chargement de script dynamiques et cela fonctionne bien, mais dans cette situation, compte tenu de la pièce maîtresse de l'application, je recherche une approche légèrement plus efficace.
pour développer sur @ Rameesh's Réponse :
Pour forcer un rechargement du fichier JS, au lieu du cache. , Utilisez ce HTML: P>
<script src="js/config.js?v=42" type="text/javascript"></script>
Après avoir eu des difficultés avec le problème du cache pendant des mois, essayez à peu près n'importe quoi (y compris un script qui modifie les URL à l'aide d'un paramètre) J'ai trouvé un message qui explique comment faire cela en utilisant le IIS fort>. < / p>
C'est le message d'origine, qui mentionne qu'il est pertinent pour IIS 7.5 (sous Windows 7)
https: //forums.iis. NET / T / 959070.aspx? Comment + Do + You + Désactiver + Caching + In + IIS + P>
L'une des choses que j'ai essayées avant qui ajoutait .html et .js dans la mise en cache de sortie et vérifie "empêcher toute mise en cache". Donc, si cela ne fonctionne pas après l'IISRESET, essayez cela, bien que je ne suis pas sûr qu'il soit réellement requis. P>
EDIT: P>
Si cela ne fonctionne pas, toujours dans l'IIS, aller aux en-têtes de réponse HTTP et ajoutez de nouvelles actions: P>
Nom: Cache-Control, Valeur: Non-Cache P> LI>
Nom: expire, valeur: 0 p> li>
ol>
<?php $xn = date("YmdHis"); echo " <script src='root.js?$xn'></script>"; ?>
Je suggérerais d'utiliser JavaScript pour générer un numéro aléatoire à l'aide de Math.Random Multipliez-le, puis Math.Floor pour renvoyer l'entier de celui-ci. Ensuite, j'ajouterais ce numéro à l'URL en tant que variable. Étant donné que le nombre change lors de chaque charge de page, le fichier ne doit jamais être mis en cache.
<script> var url="yourscript.js"; var extra="?t="; var randomNum = String((Math.floor(Math.random() * 200000000000000))); document.getElementById('myScript').src = url+extra+randomNum; </script> <script id="myScript"></script>
Ne vous rafraîchissez pas la page, rechargez plutôt.
Je ne peux pas m'attendre à ce qu'un utilisateur de l'application sache de ne pas rafraîchir. Ceci est un bug qui doit être résolu et non travaillé dans le navigateur.
304 non modifié code> n'est pas une erreur.
Il ne devrait pas d'importance que les fichiers JavaScript ne soient pas demandés. Ils seront toujours chargés. Écoutez-vous le bon événement pour réinitialiser votre page?