[AJAX] Ne fonctionne pas sous IE

Yopopipo
Invité n'ayant pas de compte PHPfrance

10 févr. 2010, 18:00

Salut à tous.
Le script que j'essaye de mettre en place sert à un jeu concours.
Le joueur choisi un lot et ensuite il peut voir un compteur associé evoluer en temps réel.
Le tout fonctionne sous FF.


Probleme: ne marche pas sous IE 7; :(


Je vous montre le code:

Code : Tout sélectionner

<script type="text/javascript"> function writediv(texte) { document.getElementById('box').innerHTML = texte; } function verifCompteur() { var lot = '<?php echo $_GET['lot']; ?>'; // Si on part du principe qu'on a testé avant si elle existe bien texte = file('/extra-compteur.php?lot=' + lot ); writediv('<span style="color:#1A7917"><b>' + texte +' :</b></span>') } 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 refresh()//script javascript qui va appeler le fonction toutes les secondes { verifCompteur(); setTimeout(refresh, 1000); } </script> </head> <body onload = "refresh();"> <div id="box"></div>

ViPHP
ViPHP | 5462 Messages

10 févr. 2010, 18:11

et que te dit l'erreur de IE7 ?

yopopipo
Invité n'ayant pas de compte PHPfrance

10 févr. 2010, 18:24

IE n'affiche pas d'erreur, IE ne met tout simplement pas a jour la requete demandée, comme si la liaison n'etait pas effective...

ViPHP
ViPHP | 5462 Messages

10 févr. 2010, 18:35

IE n'affiche pas d'erreur, IE ne met tout simplement pas a jour la requete demandée, comme si la liaison n'etait pas effective...
ta forcement un erreur, en bas a gauche (le petit triangle jaune)

Mammouth du PHP | 2937 Messages

10 févr. 2010, 18:36

Il me semble que tu ne vérifie pas suffisamment les objets disponibles pour l'instanciation de l'objet XMLHttpRequest. Essaie de corriger le code définissant ta variable xhr_object comme suit :

Code : Tout sélectionner

// Connexion XMLHTTPRequest function fnXHR () { try { return new XMLHttpRequest (); } catch (e) { try { return new ActiveXObject ('Msxml.XMLHTTP'); } catch (ee) { try { return new ActiveXObject ('Microsoft.XMLHTTP'); } catch (eee) { return false; } } } } var xhr_object = fnXHR ();
Dans le pire des cas, si tu ne t'en sors pas, rien ne t'empêche d'utiliser un framework JavaScript comme jQuery. ;)

ViPHP
ViPHP | 5462 Messages

10 févr. 2010, 18:40

Il me semble que tu ne vérifie pas suffisamment les objets disponibles pour l'instanciation de l'objet XMLHttpRequest. Essaie de corriger le code définissant ta variable xhr_object comme suit :

Code : Tout sélectionner

// Connexion XMLHTTPRequest function fnXHR () { try { return new XMLHttpRequest (); } catch (e) { try { return new ActiveXObject ('Msxml.XMLHTTP'); } catch (ee) { try { return new ActiveXObject ('Microsoft.XMLHTTP'); } catch (eee) { return false; } } } } var xhr_object = fnXHR ();
non parce que IE7 c'est 'new XMLHttpRequest()'
et faire des try dans try dans des try c'est pas beau

yopopipo
Invité n'ayant pas de compte PHPfrance

10 févr. 2010, 19:07

Toujours pas.. pas d'erreur. mais jamais a jour.
Que faire pour gros debutant comme moi??? Et utiliser un framework?? Comment ca se passe?

Mammouth du PHP | 2937 Messages

11 févr. 2010, 10:41

Et utiliser un framework?? Comment ca se passe?
En ce qui concerne le framework jQuery, sa documentation en ligne est bien fournie et te donnera les indications nécessaires. Enfin, si tu es à l'aise avec l'anglais… ;)

erasme
Invité n'ayant pas de compte PHPfrance

11 févr. 2010, 12:21

Et le innerHTML ? Il y a un bug avec IE...

cf. http://support.microsoft.com/kb/276228/fr

ViPHP
ViPHP | 3607 Messages

11 févr. 2010, 14:47

Et utiliser un framework?? Comment ca se passe?
En ce qui concerne le framework jQuery, sa documentation en ligne est bien fournie et te donnera les indications nécessaires. Enfin, si tu es à l'aise avec l'anglais… ;)
Il y une traduction de la doc ici: http://jquery.developpeur-web2.com/ (pas encore à jour pour la version 1.4, mais dans l'ensemble pour commencer ;) )
Et une autre doc api (en anglais): http://jqapi.com/

Yopopipo
Invité n'ayant pas de compte PHPfrance

11 févr. 2010, 15:17

Bon j'ai testé en mettant des alert JS toutes les 5 secondes à la place du innerHTML.
Mais ca ne marche toujours pas, l'alerte me retourne constamment la première valeur trouvée dans la BDD.(je vide le cache de la page à chaque fois)
Franchement ça commence à me prendre le choux !!
Je vais voir ce que ça peut donner avec jquery.

ViPHP
ViPHP | 3607 Messages

11 févr. 2010, 15:25


Yopopipo
Invité n'ayant pas de compte PHPfrance

11 févr. 2010, 16:49

YEEEEESSSSSSSSSSS !!! :twisted:
Ca fonctionne,
c'était donc dû au cache.

Voilà donc ma fonction qui fonctionne:

Code : Tout sélectionner

function file(fichier) { xhr_object = getXMLHTTP(); xhr_object.open("GET", fichier + "&nocache=" + Math.random(), false); xhr_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr_object.send(null); if(xhr_object.readyState == 4) return(xhr_object.responseText); }

J'avais pourtant lu les problemes dûs au cache, je le vidais donc comme ceci:

Code : Tout sélectionner

<?php header("Expires: Mon, 17 Jul 1978 05:00:00 GMT"); header('Last-Modified: '.gmdate('D, d M Y H:i:s',time()).' GMT'); header("Cache-Control: no-store, no-cache, must-revalidate");//HTTP/1.1 header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); //HTTP/1.0
Mais il faut croire que c'etait insuffisant.

Merci encore !!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 févr. 2010, 11:35

Modération :
Puisque ta question est résolue, je l'indique en ajoutant la petite icône verte "Résolu" pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.

TTu peux réaliser cette opération toi-même en cliquant sur le bouton Image en haut à droite de la réponse qui te semble la plus pertinente, si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 568 Messages

12 févr. 2010, 12:46

lors d'un appel AJAX, si tu a des problèmes de cache, je te conseille de rajouter un paramètre à ton nom de fichier, du style (avec jQuery)

Code : Tout sélectionner

url: "ajax/file.php?time="+<?php echo time(); ?>
Ainsi le timestamp est toujours différent et donc le fichier est toujours considéré comme nouveau.