OVH Cloud OVH Cloud

XMLHttpRequest ne recharge pas vraiment la page

8 réponses
Avatar
mv1
Bonjour,

Je cherche à me familiariser avec la fonction XMLHttpRequest. Mais j'ai un
problème avec Internet Explorer (avec Netscape, par exemple, pas de
souci)...

Voici un premier petit code que j'ai fais :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<HTML>
<HEAD>
<script type="text/javascript">
function file(fichier) {
if(window.XMLHttpRequest) { // FIREFOX
xhr_object = new XMLHttpRequest();
} else if(window.ActiveXObject) { // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return(false);
}
xhr_object.open("GET", fichier, false);
xhr_object.send(null);
if(xhr_object.readyState == 4) {
return(xhr_object.responseText);
} else {
return(false);
}
}

function MiseAJour () {
alert (file ("donneCar.php"));
setTimeout('MiseAJour();', 1000);
}
</script>

</head>
<body onload="MiseAJour();">
</BODY>
</HTML>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Le problème est que ça me renvoie toujours la même chose jusqu'à ce que je
vide le cache de mon navigateur.

Une idée ?

Merci !!
- mv1 -

P.S. : la seule chose monstrueuse que je fais pour palier à ça pour le
moment est que j'ai modifier ma ligne " xhr_object.open("GET", fichier,
false);" pour donner :
date = new Date;
xhr_object.open("GET", fichier+"?plop="+date.getTime(), false);
Du coup, le nom du fichier est toujours différent, et là ça marche !! mais
franchement, c'est pas beau du tout.

8 réponses

Avatar
Thierry
"mv1" <mv1 at free point fr> wrote in
news:4450a0bc$0$30119$:

P.S. : la seule chose monstrueuse que je fais pour palier à ça pour le
moment est que j'ai modifier ma ligne " xhr_object.open("GET",
fichier, false);" pour donner :
date = new Date;
xhr_object.open("GET", fichier+"?plop="+date.getTime(), false);
Du coup, le nom du fichier est toujours différent, et là ça marche !!
mais franchement, c'est pas beau du tout.


J'ai du faire exactement la même chose pour eviter de perdre du temps a
chercher une solution plus propre (peut-etre avec des headers HTTP expire
ou autre....).

Avatar
ftc
Bonjour,

Je cherche à me familiariser avec la fonction XMLHttpRequest. Mais j'ai un
problème avec Internet Explorer (avec Netscape, par exemple, pas de
souci)...

Voici un premier petit code que j'ai fais :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<HTML>
<HEAD>
<script type="text/javascript">
function file(fichier) {
if(window.XMLHttpRequest) { // FIREFOX
xhr_object = new XMLHttpRequest();
} else if(window.ActiveXObject) { // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return(false);
}
xhr_object.open("GET", fichier, false);
xhr_object.send(null);
if(xhr_object.readyState == 4) {
return(xhr_object.responseText);
} else {
return(false);
}
}

function MiseAJour () {
alert (file ("donneCar.php"));
setTimeout('MiseAJour();', 1000);
}
</script>

</head>
<body onload="MiseAJour();">
</BODY>
</HTML>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Le problème est que ça me renvoie toujours la même chose jusqu'à ce que je
vide le cache de mon navigateur.



C'est lié à la spécification HTTP qui dit qu'un fichier demandé avec la
méthode GET peut être mis en cache par le navigateur.

Il faudrait peut être stipuler les conditions de mise en cache avec les
header dans le fichier PHP.

Avatar
Freddy DISSAUX
function MiseAJour () {
alert (file ("donneCar.php"));



Dans donneCar.php:
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

ici le reste du code...
?>

fonctionne très bien. (IE 5.x, 6.x)
--
freddy <point> dsx <arobase> free <point> fr


Avatar
Bertrand B
"mv1" <mv1 at free point fr> wrote in
news:4450a0bc$0$30119$:

P.S. : la seule chose monstrueuse que je fais pour palier à ça pou r le
moment est que j'ai modifier ma ligne " xhr_object.open("GET",
fichier, false);" pour donner :
date = new Date;
xhr_object.open("GET", fichier+"?plop="+date.getTime(), false);
Du coup, le nom du fichier est toujours différent, et là ça marc he !!
mais franchement, c'est pas beau du tout.


J'ai du faire exactement la même chose pour eviter de perdre du temps a
chercher une solution plus propre (peut-etre avec des headers HTTP expi re
ou autre....).

Ca m'étonnerait que ça marche ...

J'irais plutôt voir dans les réglage du butineur vérifier si on rec harge
à chaque fois la page.
Je me pose vraiment des questions sur la façon dont sont gérer les
caches dans les différents navigateurs.


Avatar
Patrick Mevzek
Dans donneCar.php:
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");


Le 26 juillet 1997 n'était pas un lundi.

--
Patrick Mevzek . . . . . . Dot and Co (Paris, France)
<http://www.dotandco.net/> <http://www.dotandco.com/>
Dépêches sur le nommage <news://news.dotandco.net/dotandco.info.news>

Avatar
Thierry
Freddy DISSAUX wrote in
news::

function MiseAJour () {
alert (file ("donneCar.php"));



Dans donneCar.php:
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

ici le reste du code...
?>

fonctionne très bien. (IE 5.x, 6.x)


J'avais essayé avec uniquement header("Cache-Control: no-cache");
Quesqu'y fait que ton code marche ? L'ajout des Expire / Last-Modified ?

--
Cercher boulot informaticien sur Toulouse, Nantes et Bordeaux de
préférence.
CV par retour de courrier. (gros systèmes s'abstenir)



Avatar
mv1
"Freddy DISSAUX" a écrit dans le
message de news:
function MiseAJour () {
alert (file ("donneCar.php"));



Dans donneCar.php:
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

ici le reste du code...
?>

fonctionne très bien. (IE 5.x, 6.x)
--
freddy <point> dsx <arobase> free <point> fr


Super !! merci beaucoup à tous !!
- mv1 -



Avatar
thetarvos

J'avais essayé avec uniquement header("Cache-Control: no-cache");
Quesqu'y fait que ton code marche ? L'ajout des Expire / Last-Modified ?


Cela dépend du navigateur et des en-têtes qu'il supporte (puisque
c'est bien un problème de client), certains se contenteront du
"Cache-Control: no-cache", d'autres auront besoin d'arguments
supplémentaires. Il semble que ce soit le cas avec IE :)