Pb AJAX sous IE

Résolu
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012 - 17 nov. 2006 à 10:41
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012 - 23 nov. 2006 à 13:51
bonjour,

j'ai créé un mini projet où j'ai 3 fichiers :
- 1 fichier html : pour affichier ma page
- 1 fichier javascript : script lié à ma page html
- 1 fichier cgi (mis à jour dynamiquement par le serveur en interne) : il contient des variables parsée en JSON

=> j'affiche ma page HTML et j'utilise en script (AJAX) qui se lance toutes les 5secondes et qui va chercher dans le fichier cgi mes variables pour les afficher

tout fonctionne bien sous FireFox mais je ne sais pas pourquoi, sous IE (6 et 7) la page met les variables a jour au demarrage une fois puis ne le fait plus
=> le probleme est que sous IE je rentre toutes les 5s dans la boucle


if
(http_request.status == 200)


même si mon cable reseau est debranché !!???!!

voici mon projet :
http://cjoint.com/?lqrVZsvbxE

voila le code si vous preferez ne pas telecharger le fichier :

fichier Index.html :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
        <script type="text/javascript" src="RecupereVariables.js"></script>
    </head>
   
   
    <!-- -->
        <noscript> La page ne peut pas être affichée correctement car Javascript n'est pas activé</noscript>
       
       
                Lancer la requete
       
       
        Etat Communication : ?

        Etat refresh1 : ?

        Etat refresh2 : ?

       
        SerialNumber : ?

        Temperature : ?°C

        Batterie : ?V

        UpTime : ?

        Tempo : ?

        Optic1 : ?

        Optic2 : ?

        Optic3 : ?

        PowerON1 : ?

        PowerON2 : ?

        PowerON3 : ?

        ReveilEnb1 : ?

        ReveilEnb2 : ?

        ReveilEnb3 : ?

       
   
</html>

fichier RecupereVariables.js :

var fichier_json = "./data.cgi";
var http_request = false;
var num_refresh1 = 0;
var num_refresh2 = 0;
var num_connection = 1;
var num_connectionbefore = 0;
var num_connectionOK = 0;

function fonction_start()
{
   
    num_connectionOK = 1;
    makeRequest();
    setInterval(function(){makeRequest();},5000); // boucle toutes les 5s   
}

function makeRequest()
{
    http_request = false;
    num_refresh1++;
   
    document.getElementById("refresh1").innerHTML = num_refresh1; // detection de connection
   
   
    /*if (num_connectionbefore == num_connection)
    {
        document.getElementById("ComStatus").innerHTML = "OFF";
    } else {
        document.getElementById("ComStatus").innerHTML = "ON";
    }
    num_connectionbefore = num_connection;*/
   
    if (num_connectionOK == 1)
    {
        document.getElementById("ComStatus").innerHTML = "ON";
    } else {
        document.getElementById("ComStatus").innerHTML = "OFF";
    }
    num_connectionOK = 0;
   
   
    http_request = getXhr();       
   
    http_request.onreadystatechange = request_execute;
    http_request.open("GET", fichier_json, true);
    http_request.send(null);
}

function getXhr()
{
    var xhr = null;
   
    if(window.XMLHttpRequest) // Firefox et autres
       xhr = new XMLHttpRequest();
    else if(window.ActiveXObject){ // Internet Explorer
       try {
                xhr = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
    }
    else { // XMLHttpRequest non supporté par le navigateur
       alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
       xhr = false;
    }
    return xhr;
}

function request_execute()
{
    //alert("execution de la fonction");
    //alert(http_request.status);
   
    if (http_request.readyState == 4)
    {
        if (http_request.status == 200) // page trouvée
        {
            eval(http_request.responseText);
           
            num_connectionOK = 1;
            document.getElementById("ComStatus").innerHTML = "ON";
           
            num_refresh2++;
            num_connection++;
                       
            document.getElementById("refresh2").innerHTML = num_refresh2;
           
            document.getElementById("SerialNumber").innerHTML = JSONvariables.SerialNumber;
            document.getElementById("Temperature").innerHTML = JSONvariables.Temperature;
            document.getElementById("Batterie").innerHTML = JSONvariables.Batterie;
            document.getElementById("UpTime").innerHTML = JSONvariables.UpTime;
            document.getElementById("Tempo").innerHTML = JSONvariables.Tempo;
            document.getElementById("Optic1").innerHTML = JSONvariables.Optic1;
            document.getElementById("Optic2").innerHTML = JSONvariables.Optic2;
            document.getElementById("Optic3").innerHTML = JSONvariables.Optic3;
            document.getElementById("PowerON1").innerHTML = JSONvariables.PowerON1;
            document.getElementById("PowerON2").innerHTML = JSONvariables.PowerON2;
            document.getElementById("PowerON3").innerHTML = JSONvariables.PowerON3;
            document.getElementById("ReveilEnb1").innerHTML = JSONvariables.ReveilEnb1;
            document.getElementById("ReveilEnb2").innerHTML = JSONvariables.ReveilEnb2;
            document.getElementById("ReveilEnb3").innerHTML = JSONvariables.ReveilEnb3;           
        } else if (http_request.status == 404){ // page non trouvée
            document.getElementById("ComStatus").innerHTML = "OFF";
        }
    }
}

fichier data.cgi :
var JSONvariables = {
    "SerialNumber": "%30",
    "Temperature": "%31",
    "Batterie": "%32",
    "UpTime": "%34",
    "Tempo": "%33",
    "Optic1": "%21",
    "Optic2": "%22",
    "Optic3": "%23",
    "PowerON1": "%24",
    "PowerON2": "%25",
    "PowerON3": "%26",
    "ReveilEnb1": "%27",
    "ReveilEnb2": "%28",
    "ReveilEnb3": "%29"
}

13 réponses

rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
21 nov. 2006 à 22:43
Excuse moi .... je t'avais oublié

Bon ben je viens de reprendre ton code et moi ma méthode d'utiliser un hackTime marche parfaitement!!!!!! sans rien régler dans les navigateurs

voici la fin de la fonction qui envoie la requête :

........
........
http_request = getXhr();        

var hackTime = (new Date()).getTime();
http_request.onreadystatechange = request_execute;
http_request.open("GET", fichier_json+'?'+hackTime, true);
http_request.send(null);

après oui c'est sur ca dépend du type de serveur mais bon moi j'ai jamais eu de problème en utilisant ca et je l'utilise sous
apache avec php et même jsp

et l'url est sur d'être trouvée puisqu'en fait c'est comme si tu lui envoyais un paramètre en méthode GET :
fichier.cgi?0294087287
et ca fonctionne tout le temps car c'est le timestamp

voilà
bonne prog

@+

-- The Rubik's Man --
3
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
17 nov. 2006 à 13:35
tu peux tester avec un 'delete http_request ' à la fin de ton request_execute ?

J'aime bien effacer des variables kan elles servent plus..

S.
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
17 nov. 2006 à 16:12
ça change rien

sous IE7, j'ai fait "outils" => "options internet" => "parametres
(hystorique de navigation)" => dans "vérifier s'il existe une
version plus recente...", j'ai coché le bouton "a chaque visite de
cette page web" (avant, c'etait sur automatique)


et la ça marche => c'est donc un probleme de mise en cache du fichier cgi ce qui empeche de le recharger a chaque appel

maintenant, comment faire pour le feinter ?
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
17 nov. 2006 à 17:14
Bonjour,

vu que tu relances l'appel toutes les 5 secondes, n'y aurait-il pas un conflit entre l'appel x et l'appel x+1 ?
As tu essayé sans le timer ?

Nickadele
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
17 nov. 2006 à 22:00
Salut

En fait je ne comprends pas trop ton problème car moi sous firefox ou sur IE la requete ajax se lance bien toute les 5 secondes
et la variable refresh s'incrémente bien sur la page sur les 2 navigateurs.
Donc peux tu mieux expliquer ton problème stp??

Par contre j'ai voulu vérifier quelque chose en lancant la page et en modifiant moi meme les données dans la variables JSON et par contre sur aucun navigateur les données sont mise à jour quand je les modifie comme si c'était le serveur qui le faisait.

voila

-- The Rubik's Man --
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
20 nov. 2006 à 08:46
J'ai bien la variable refresh qui fonctionne : le probleme est que si je change une valeur de variable dans le fichier cgi pendant l'execution du script, elle n'est pas mise à jour => je suis sure que c'est un probleme que IE mets le fichier en cache (je n'ai pas le probleme sous Firefox : par defaut, il doit être configuré differemment)
=> j'ai trouvé sur le net des personne qui avaient le même type de probleme : il modifiaient l'URL de façon a avoir un nom unique a chaque envoie en rajoutant un nombre aléatoire mais ça ne marche pas avec serveur qui est en fait un micro-controlleur (il n'accepte pas ce genre d'ecriture à priori : j'ai plus rien qui s'affiche)


var toto = fichier_json+"?cpt="+num_refresh1;
0
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
20 nov. 2006 à 11:42
Oui effectivement moi aussi j'utilise cette méthode pour les images sous IE car sous firefox j'ai pas le problème

Mais avec ton code sous Firefox j'ai également le meme problème que sous IE.

Je vais essayer des hacks et je te tiens au courant

-- The Rubik's Man --
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
20 nov. 2006 à 15:22
alors, tu ne trouve pas ? :( ... moi, je patauge complet dans la semoule ....
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
20 nov. 2006 à 18:30
B

onjour...

as tu essayé avec les balises meta...
<META HTTP-EQUIV" PRAGMA " CONTENT"NO-CACHE"><META HTTP-EQUIV" REFRESH " CONTENT"5">
à la place de setInterval...

;0)
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
21 nov. 2006 à 09:04
cette solution ne va pas (il me semble) : c'est pas une page web que je charge mais un fichier texte
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
23 nov. 2006 à 10:33
c'est bon, j'ai reussi a faire fonctionner ta methode : j'ai du modifier le code source de mon serveur (j'aime pas trop ça) car il n'acceptait pas ce genre d'ecriture => monchemin.cgi?toto=0101211
0
rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
23 nov. 2006 à 13:13
Comment ca il n'accepte pas ce genre d'écriture???????

Il doit accepter cet url obligatoirement et sans rien changer normalement!!!! car c'est un paramètre passé en GET c'est la base!!
Donc je ne vois pas pourquoi ton serveur ne l'acceptais pas... c'est qu'il devait y avoir un problème.

-- The Rubik's Man --
0
cs_Emcy Messages postés 42 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 17 juillet 2012
23 nov. 2006 à 13:51
mon serveur n'est pas un PC, c'est une petite carte avec un micro-controlleur qui tourne a 25MHz : le programme de base acceptait d'avoir un parametre s'il recevait un SET mais pas un GET => j'ai donc fait la modif pour qu'il tronque l'URL reçue après le "?"
0
Rejoignez-nous