Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1712 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Requête sur un fichier déjà en cache avec Opera via XMLHttpRequest

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête sur un fichier déjà en cache avec Opera via XMLHttpRequest

n°1565527
fils_de_la​_lumiere
Posté le 26-05-2007 à 02:03:32  profilanswer
 

Bonjour, :hello:  
 
J'utilise dans un javascript l'objet XMLHttpRequest pour lancer des requêtes vers des documents xml et normalement je rencontre pas de problème. Sauf que là, avec Opera en lançant des requêtes sur des fichiers de plus de 98112 octets (oui c'est précis :d ) ça marche... mais qu'une seule fois! Dès qu'une nouvelle requête est lancée sur la même URL, le navigateur utilise le cache et foire l'opération (il ne se passe plus rien, il faut vider le cache pour pouvoir reloader le fichier).
 
La seule solution serait de générer une variable aléatoire dans l'url mais ça forcerait le reload du fichier à chaque fois...
 
Voici l'exemple simplifié au maximum, normalement sous Opera le lien affiche une boîte de dialogue qu'une seule fois :
 
98113octets.xml

Code :
  1. fichier contenant <xml>000000000000...</xml> de 98113 octets


test.htm

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/dtD/xhtml1-strict.dtd">
  2. <html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4.   <title></title>
  5.   <script type="text/javascript">
  6. function LoadXML(Url, CallBack) {
  7. var XMlDoc = new XMLHttpRequest();
  8. XMlDoc.overrideMimeType('text/xml');
  9. XMlDoc.open('GET', Url, false);
  10. XMlDoc.send(null);
  11. alert("ok" );
  12. }
  13.   </script>
  14. </head>
  15. <body>
  16.   <div>
  17.    <a href="javascript:LoadXML('98113octets.xml')">Go!</a>
  18.   </div>
  19. </body>
  20. </html>


Exemple

mood
Publicité
Posté le 26-05-2007 à 02:03:32  profilanswer
 

n°1565530
gatsu35
Blablaté par Harko
Posté le 26-05-2007 à 06:28:12  profilanswer
 

fils_de_la_lumiere a écrit :

Bonjour, :hello:  
 
J'utilise dans un javascript l'objet XMLHttpRequest pour lancer des requêtes vers des documents xml et normalement je rencontre pas de problème. Sauf que là, avec Opera en lançant des requêtes sur des fichiers de plus de 98112 octets (oui c'est précis :d ) ça marche... mais qu'une seule fois! Dès qu'une nouvelle requête est lancée sur la même URL, le navigateur utilise le cache et foire l'opération (il ne se passe plus rien, il faut vider le cache pour pouvoir reloader le fichier).
 
La seule solution serait de générer une variable aléatoire dans l'url mais ça forcerait le reload du fichier à chaque fois...
 
Voici l'exemple simplifié au maximum, normalement sous Opera le lien affiche une boîte de dialogue qu'une seule fois :
 
98113octets.xml

Code :
  1. fichier contenant <xml>000000000000...</xml> de 98113 octets


test.htm

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/dtD/xhtml1-strict.dtd">
  2. <html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4.   <title></title>
  5.   <script type="text/javascript">
  6. function LoadXML(Url, CallBack) {
  7. var XMlDoc = new XMLHttpRequest();
  8. XMlDoc.overrideMimeType('text/xml');
  9. XMlDoc.open('GET', Url, false);
  10. XMlDoc.send(null);
  11. alert("ok" );
  12. }
  13.   </script>
  14. </head>
  15. <body>
  16.   <div>
  17.    <a href="javascript:LoadXML('98113octets.xml')">Go!</a>
  18.   </div>
  19. </body>
  20. </html>


Exemple


 
 
Mais justement c'est le but, tu veux recharger ton XML, ben tu force le rechargement via un "?nocache="+Math.random() ajouté à l'url du XML.  
Je vois pas ton PB
si tu veux reloader ton fichier force l'operation.
ET accessoirement; si c'est pour mettre des merdes dans le XML on passe par du CDATA et le XML c'est en UTF-8 en général avec un petit prologue avant le doctype.

n°1565578
fils_de_la​_lumiere
Posté le 26-05-2007 à 13:53:19  profilanswer
 

Heu non le xml de l'exemple est complètement bidon, tout ce qui compte c'est que sa taille totale soit de 98113 octets.
 
Apparemment tu ne m'a pas très bien compris je recommence en essayant d'être plus clair :
 
Avec Opera (dernière version), lorsque je lance une requête sur un fichier dépassant 98112 octets via XMLHttpRequest, la première fois : il télécharge le fichier (sans se servir de son cache donc) et réussi l'opération.
 
Les fois suivantes, il utilise son cache plutôt que de re-télécharger le fichier (logique, d'ailleurs c'est ce que je veux).  
 
Mais petit bémol : il foire complètement et ne récupère pas le fichier dans son cache. Essaie avec ce test, tu vides ton cache, tu cliques sur "go", au bout de quelques secondes le fichier est téléchargé et "ok" s'affiche mais les fois suivantes l'opération (qui devrait être immédiate avec le cache d'ailleurs) ne se fait plus...

n°1565619
gatsu35
Blablaté par Harko
Posté le 26-05-2007 à 16:45:56  profilanswer
 

fils_de_la_lumiere a écrit :


Les fois suivantes, il utilise son cache plutôt que de re-télécharger le fichier (logique, d'ailleurs c'est ce que je veux).


 
Dans ce cas tu stockes le XML dans un cookie pour les fois suivantes et on en parle plus.
Mais je trouve un peu stupide que tu veuilles forcer le navigateur à recharger le XML depuis son cache au lieu de ton site.
C'est pas normal.
 

fils_de_la_lumiere a écrit :


Mais petit bémol : il foire complètement et ne récupère pas le fichier dans son cache. Essaie avec ce test, tu vides ton cache, tu cliques sur "go", au bout de quelques secondes le fichier est téléchargé et "ok" s'affiche mais les fois suivantes l'opération (qui devrait être immédiate avec le cache d'ailleurs) ne se fait plus...


Bizarre ton pb, je n'ai pas le temps de tester. Mais j'ai jouer azvec des XML de 400 Ko et sous Opera je n'ai pas eu de problème ceci dit je forcais le XML à être retéléchargé

n°1565654
fils_de_la​_lumiere
Posté le 26-05-2007 à 18:42:58  profilanswer
 

J'ai jamais forcé Opera à recharger le fichier depuis le cache :d , je fais juste une requête vers une ressource via XMLHttpRequest après il fait ce qu'il veut (le plus logique serait quand même qu'il le mette en cache mais bon) tant que ça marche.
 
La seule chose que je veux c'est de pouvoir faire cette requête via XMLHttpRequest vers cette ressource plusieurs fois dans l'avenir (dans 1 minute ou 1 semaine) mais le fait est que si la ressource a été mise en cache une fois, ça ne marche plus par la suite à moins de vider le cache.
 
La solution du cookie est la pire des solutions :D  (d'autant plus qu'un cookie est limité en taille), logiquement ça devrait marcher avec ce p'tit bout de code ultra simple y'a pas de raison.


Message édité par fils_de_la_lumiere le 26-05-2007 à 18:45:24
n°1565692
gatsu35
Blablaté par Harko
Posté le 26-05-2007 à 21:31:55  profilanswer
 

ben tu forces le téléchargement et on en parle plus. De toute manière c'est comme cela que devraient etre traitées toutes les requetes HTTP

n°1565698
fils_de_la​_lumiere
Posté le 26-05-2007 à 21:48:50  profilanswer
 

Je post justement pour trouver une alternative au forçage du redl car c'est pas normal.
 
Le xml en question est en fait un fichier .XSL statique de 98 ko qui est sensé mettre en style un fichier XML dynamique de ~20ko (je passe par la transformation xslt et je peux pas faire autrement), c'est impensable de re-télécharger à chaque fois le XSL de 98ko d'autant plus que je n'ai ce problème qu'avec Opera.
 
De plus j'aimerai comprendre pourquoi ça marche pas avec cet exemple simplifié au maximum plutôt que de me résigner.

n°1565756
gatsu35
Blablaté par Harko
Posté le 27-05-2007 à 02:14:28  profilanswer
 

Je kif, une XSL qui pèse 5x plus lourd que le XML :/
Ya un bug dans ta matrice hein :o

n°1565984
fils_de_la​_lumiere
Posté le 27-05-2007 à 22:58:32  profilanswer
 

aucune importance, ça aurait pu être un .avi le problème n'est pas là, je cherche juste à faire fonctionner ce minuscule petit bout de code tout simple :o

n°1566951
fils_de_la​_lumiere
Posté le 29-05-2007 à 21:55:36  profilanswer
 

up


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Requête sur un fichier déjà en cache avec Opera via XMLHttpRequest

 

Sujets relatifs
Aide pour la creation d'un fichier .batpdf vers fichier image
[PHP] Extraire un fichier zip[C#][ASP.NET1.1]Exporter datagrid vers un fichier excel ou word
est-il possible d'utiliser une fonction de son cru ds une requète SQL?[RESOLU]Récupération des données d'un fichier .txt
requête sql count(*) minusProblème requete SQL sur du PHP
Manipuler un simple fichier texte ?!transfert de fichier de linux vers windows & vise vers ca
Plus de sujets relatifs à : Requête sur un fichier déjà en cache avec Opera via XMLHttpRequest


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR