2010-12-02 26 views
1

J'ai une application Web ASP.NET 3.5 écrite en VS 2010. J'ai un aspx avec une référence de script à un fichier .js qui réside dans un dossier Scripts.Mise en cache du script jQuery sur localhost

<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
<script src="Scripts/HeaderControl.js" type="text/javascript"></script> 

Dans le fichier .js j'utilise jQuery pour faire des diverses opérations, dont l'un était simplement une déclaration de débogage utilisé alerte pour cracher une valeur sur la page que je puisse voir ce qu'il était.

if ($) { 
    $(document).ready(function() { 
     $("input[id='q']").click(function($e) { 
      alert("clicked"); 
     }); 
    }); 
} 

Tout cela a très bien fonctionné jusqu'à ce que je suis allé supprimer l'instruction de débogage (l'alerte "cliqué"). Après l'avoir complètement retiré du .js, j'ai reconstruit le projet, appuyé sur F5 pour le lancer sur ma machine locale, mais dès que j'ai cliqué sur l'étiquette d'entrée au-dessus de l'alerte apparaissait toujours et disait "cliqué". J'ai essayé une fois après l'autre de faire en sorte que l'application Web comprenne que le fichier .js avait été modifié, mais il affichait toujours l'alerte chaque fois que je cliquais sur la balise d'entrée. J'ai finalement décidé de renommer le .js en quelque chose de complètement différent, quand l'application web a réalisé que le .js avait été changé et il a quitté l'affichage de l'alerte lorsque je cliquais sur le tag d'entrée. Alors, pourquoi ce fichier .js at-il été mis en cache? C'est un comportement très ennuyeux et j'aimerais savoir exactement ce qui l'a causé. Toute aide serait appréciée. Merci!

EDIT: Le navigateur était IE7. Je n'ai pas vérifié pour voir si elle l'a fait aussi dans Mozilla. Peu importe, j'ai fait au moins 100 fichiers .js différents et je n'ai jamais remarqué ce comportement auparavant. La seule différence pour moi est que ce .js est dans une application web, alors que d'habitude je les crée dans des projets de sites web ASP.NET.

+0

Quel navigateur utilisez-vous, quels autres modules avez-vous installés, avez-vous essayé de vider le cache, avez-vous essayé un rafraîchissement? – jcolebrand

+0

Si je me souviens bien, vous pouvez appuyer sur Ctrl + F5 dans IE pour forcer votre cache à actualiser. Donner un coup de feu. – RabidFire

+0

@RabidFire ~ Félicitations pour votre rappel correct, mais cela fonctionne de cette façon sur tous les navigateurs. Cependant, utiliser quelque chose comme CCleaner peut être plus rapide, car il effacera tous les caches simultanément (et habituellement plus rapidement que les API) – jcolebrand

Répondre

3

Vous devez Shift + Actualiser, ou simplement effacer le cache de votre navigateur.

Ce comportement est normal:

Javascript et fichiers CSS ne vérifient même pas pour une nouvelle version (une If-Modified-Since demande) si l'ancienne version est toujours valide selon les en-têtes de cache dans la réponse envoyée la première fois.

Je crois que si vous mettez dans n'importe quelle chaîne de requête, même juste ?, à la fin de l'URL (ie, Scripts/jquery-1.4.1.min.js?) certains navigateurs (Firefox au moins) vont changer pour vérifier une nouvelle version du fichier à chaque fois comme il le fera pour les images. Cela pourrait être utile pendant le développement.

Certains développeurs ajouteront également une version au fichier (?123) afin qu'ils puissent ignorer complètement le cache lorsqu'une nouvelle version d'une application Web est publiée. Je ne suis pas sûr de l'efficacité de ce point si vous avez déjà un point d'interrogation à la fin, car il cherchera quand même une version mise à jour (encore une fois, je ne suis pas sûr de tous les navigateurs).

+0

+1 en se référant à l'en-tête approprié pour que le demandeur en apprenne plus sur les requêtes HTTP ... – jcolebrand

+0

Très utile. Je vous remercie. – Jagd