j'ai un problème avec un script ajax utilisé sur la page d'accueil du site generationsfm.com
ce script lit des données dans un fichier xml puis les affiche dans un <div> :
<script language="JavaScript" type="text/javascript">
function getXhr() {
var req = null;
//firefox
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}
//ie
else if (window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
}
//non supporté
else {
alert("Fonction non supportée par le navigateur");
req = false;
}
return (req);
}
function getTrack()
{
var req = getXhr();
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {
var resultat = req.responseText;
document.getElementById('div_track').innerHTML=resultat;
}
};
req.open("GET","http://generationsfm.com/ajax_track.php?act=track",true);
req.send(null);
setTimeout("getTrack()", 5000);
}
getTrack();
</script>
seulement voilà, sous firefox tout marche très bien, mais sous ie l'affichage n'est jamais mis à jour, même en rafraichissant la page ou en vidant le cache...
le seul moyen est de fermer complètement le navigateur et de le relancer
remplace:
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
par:
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
req = new ActiveXObject("Msxml2.XMLHTTP");
}
juste au cas ou, car personnellement justilise uniquement :
new ActiveXObject('Microsoft.XMLHTTP');
Sinon deuxiéme point, dans la fonctionget_track:
remplace: document.getElementById('div_track').innerHTML=resultat;
par:
alert(resultat);
en fait tu utilises innerHTML, c'est super pratique, sauf que innerHTML n'a pas un comportement standard, j'ai moi aussi des problèmes sous IE, Opera...
Pour faire la même chose sans innerHTML, il faut utiliser les fonctions du DOM et c'est beaucoup plus compliqué, hélas.
__________________________ Eoliennes et informatique sur freresguizmo
bon alors j'ai testé tes deux propositions mais le changement dans l'acquisition du xhr n'a rien solutionné, et le alert(resultat) retourne le bon truc sous ff, mais sous ie il affiche toujours la même chose, même quand le fichier xml a changé :(
Sous IE, bien que le résultat ne change jamais, il retourne bien quelque chose de cohérent? Une ancienne version du fichier XML?
"il affiche toujours la même chose" => Tout de suite je pense à un problème de cache.
Mais comment vider le cache? Je sais pas trop. Essaye de rafraichir ta page en faisant F5.
Sinon essaye de supprimer les pages web temporairement stockées je ne sais plus où.
__________________________ Eoliennes et informatique sur freresguizmo
effectivement en supprimant les fichiers temporaires, l'affichage est mis à jour, ce qui constitue déjà un grand pas en avant sachant qu'avant les dernières modif même en faisant ça l'affichage restait le même
mais le but du script est justement de mettre à jour le contenu sans recharger la page, et encore moins en vidant les dossiers temporaires
ou sinon il faudrait une fonction php ou ajax qui vide les dossiers temporaires automatiquement ou au moins qui empêche le navigateur de s'en servir...
mais je ne sais pas du tout si c'est possible...
Le mécanisme du cache est sensé être transparent. Normalement tu ne devrais pas avoir à t'en soucier. Mais j'avoue que là je ne sais pas trop quoi te dire...
Peut être qu'un connaisseur du cache pourra venir à notre secours?
Pour l'instant tu testes tout sur ta machine? Que se passe-t-il si tu mets ton fichier en ligne?
__________________________ Eoliennes et informatique sur freresguizmo
non non je test tout directement sur le serveur generationsfm.com
mais c'est vraiment bizarre : parfois vider le cache suffit à mettre à jour l'affichage, parfois il faut vider le cache ET recharger la page, et parfois seule la fermeture réouverture du navigateur met à jour l'affichage...
je n'y comprends pas grand chose...
[EDIT] : bon ça semble s'être stabilisé, pour mettre à jour l'affichage sous ie il faut vider le cache ET recharger la page avec F5... mais pourquoi le script qui doit modifier l'affichage de lui même ne fonctionne pas ??? je me répète mais sous ff tout marche très bien !!
"Les scripts PHP génèrent souvent du HTML dynamiquement, qui ne doit pas être mis en cache, ni par le client, ni par les proxy intermédiaires. On peut forcer la désactivation du cache de nombreux clients et proxy avec :"
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du passé
Par contre ça t'oblige a passer par du php, mais je pense que ce n'est pas trés grave.
Aprés il faut voir si on peut configurer le serveur web pour qu'il envoie des entetes http particuliéres pour un fichier.
Est-ce que tu utilises la barre d'outils pour developpeur dans FF? Parce qu'il y a une option "desactiver le cache".
Et puis ca prouve la supériorité de ff sur ie
__________________________ Eoliennes et informatique sur freresguizmo
ok je vais test ça
effectivement la lecture du fichier xml se fait via un fichier php donc ça devrait être facile à mettre en place
on va voir si ça passe ^^
à propos de la supériorité de ff personnellement je n'avais pas besoin de preuve mais vu que c'est un site grand public les fonctionnalité doivent être 100% compatible ie :/
merci pour ton aide en tout cas !!
[EDIT] : heu mais il faut ajouter les deux lignes ???
En fait test dans les deux cas et dis moi si la seconde est nécessaire
Aprés il va surement te falloir remplacer innerHTML et ça sera pas de la tarte
En fait je suis quasiment sur le même problème que toi.
__________________________ Eoliennes et informatique sur freresguizmo