Mar.16

AJAX, XMLHttp et le cache !!

En developpant le projet dotnet (lire mon post du 26/02/06) en XHTML/JS à la sauce AJAX, je me suis heurté à un problème de cache !
En effet que l’on utilise l’objet XMLHttpRequest pour Firefox & Co ou l’objet de IE (Microsoft.XMLHTTP), on appelle la méthode open et send pour récuperer un fichier XML par le code :

Le problème de cela, c’est qu’une fois le XML téléchargé, le navigateur le met dans son cache ! Si par la suite vous modifiez votre XML, votre application web ne tiendra pas compte des modifications même en rechargant la page (F5) ce qui est un peu embêtant !
Pour remedier à cela, une technique consiste a appeler la methode setRequestHeader pour définir le Cache-Control à no-cache par le code :

Le problème, c’est que ca marche PAS 😀 Enfin du moins sur pas mon Firefox…. ^^

La technique que j’ai implémenté est de passer des parametres uniques dans l’URL de notre fichier XML !
Je m’explique, les adresses URL http://monserveur/monfichier.xml?id=1 et http://monserveur/monfichier.xml?id=2 retourne tous les deux le même fichier à savoir monfichier.xml, ici les parametres n’ont aucune influence coté serveur mais pour le coté client, le navigateur (IE,FF,..) pense que ce sont 2 fichiers differentes car les URL ne sont pas identique et donc on contourne le problème de cache !!
Personnellement, j’utilise pour cela la fonction getTime() de l’objet Javascript Date qui retourne le nombre de millisecondes depuis le 1er Janvier 1970 ! On obtient bien un parametre unique a moins de déregler son horloge au millieme de seconde près ^^.
Le code final:

Elle est pas belle vie ?? ^^ 🙂

Perso,Dev
Share this Story:
  • facebook
  • twitter
  • gplus

Comments(5)

  1. MonsieurN
    le 8 avril 2006 à 21:51

    Salut, C’est Nicolas d’IS1 Valenciennes (celui qui t’a résolu un problème de positionnement CSS un jour dans le train).

    Je me demande pourquoi tu utilises une URL absolue pour faire ta requête. Le fichier XML se trouvera sur un autre serveur que l’application web ? Parce que dans le cas contraire, tu n’as qu’à mettre ‘mon_fichier.xml’ pour l’URL et en plus tu n’auras pas ce problème de cache.

  2. OrochimaruSama
    le 11 septembre 2006 à 14:26

    Mici SeBeuh 🙂 pour cette superbe astuce :p

    Et je tiens à dire (en tout cas pour moi) que même en utilisant l’URL relative le problème de cache persistait.

    Donc encore une fois : Elle est trés trés bien ton astuce 🙂

    (Si kelk1 dotre trouve mieux, chui preneur héhé :p)

  3. Raph
    le 20 septembre 2006 à 15:21

    MERCI BEAUCOUP !!!
    ca commencait à m’agacer ce problème de cache sur les fichiers xml..

  4. Rdmoshpit
    le 9 janvier 2008 à 16:07

    C’est beau ! merci beaucoup, c’est juste parfait !

  5. david
    le 18 novembre 2008 à 13:28

    super astuce! ca m’a sauvé!

Leave a comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Comment