IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Problème avec XMLhttp Request


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 234
    Points : 172
    Points
    172
    Par défaut Problème avec XMLhttp Request
    Je ne sais pas si je suis dans le meilleur forum mais bon je pose quand meme ma question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    function hapinessIsFree(xmlhttp)
    {
        alert(xmlhttp.readyState);
        if (xmlhttp.readyState == 4) /* 4 : état "complete" */
            if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
                alert(xmlhttp.responseText);
    }           
     
     
    function Init()
    {    
        var xmlhttp=Init_XHR();
     
        if(xmlhttp==false)
        {
            alert('pas bon');
            return;
        }
        xmlhttp.onreadystatechange=hapinessIsFree(xmlhttp);
     
        xmlhttp.open('GET', '../Test/Test.html?Message=Salut!!!!!!',false);
     
        xmlhttp.send(null);
        alert(xmlhttp.readyState);
    }
    Voila l'etat passe bien à 4 (d'après l'affichage) mais a chaque etape la fonction haponessisfree devrait être appelé et je ne comprend pas pourquoi ! Merci d'avance pour vos réponse

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    salut,
    ton affectation equivaut a un appel de la méthode, tu ne lui affecte pas une reference donc.

    essayes plutot un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    function hapinessIsFree()
    {
        alert(this.readyState);
        if (this.readyState == 4) /* 4 : état "complete" */
            if (this.status == 200) /* 200 : code HTTP pour OK */
                alert(this.responseText);
    }           
     
     
    function Init()
    {    
        var xmlhttp=Init_XHR();
     
        if(xmlhttp==false)
        {
            alert('pas bon');
            return;
        }
        xmlhttp.onreadystatechange=hapinessIsFree;
     
        xmlhttp.open('GET', '../Test/Test.html?Message=Salut!!!!!!',false);
     
        xmlhttp.send(null);
        alert(xmlhttp.readyState);
    }
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 234
    Points : 172
    Points
    172
    Par défaut
    Je te remercie beaucoup pour ton coup de main, mais je n'arrive pas à faire fonctionner ta méthode. En effet soit j'affecte "onreadystate" avec les parenthèses auquel cas il ne trouve pas this.state (il le dit non definit). Soit si j'affecte sans parenthès il ne se passe rien et aucune erreur javascript.

    Je ne sais pas si je l'ai dit dans mon premier message mais ca me semble important : la fonction hapinessIsFree dans le code que j'ai donné s'éxécuté mais une seule fois.

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    ok, autre solution alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    function hapinessIsFree()
    {
        alert(xmlhttp.readyState);
        if (xmlhttp.readyState == 4) /* 4 : état "complete" */
            if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
                alert(xmlhttp.responseText);
    }           
    var xmlhttp;
     
    function Init()
    {    
        xmlhttp=Init_XHR();
     
        if(xmlhttp==false)
        {
            alert('pas bon');
            return;
        }
        xmlhttp.onreadystatechange=hapinessIsFree;
     
        xmlhttp.open('GET', '../Test/Test.html?Message=Salut!!!!!!',false);
     
        xmlhttp.send(null);
        alert(xmlhttp.readyState);
    }
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 234
    Points : 172
    Points
    172
    Par défaut
    Ca ne marche toujours pas je me demande si je ne pourrais pas avoir fais une erreur dans ma fonction init_XHR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    function Init_XHR()
    {
        var bow;
         if (window.XMLHttpRequest)
              bow='other';
         else if (window.ActiveXObject)
                bow='IE';
              else if (window.createRequest) 
                     bow='iceBrowser';
              else
                 {
                      alert('Votre navigateur ne peut effectuer cette requete. Si vous utilisez Safari, IE, Mozilla, Firefox, Netscape ou Opera veuillez les mettre a jour.');
                    return false;
                 }
           //declaration de l'objet    
        var xmlhttp = false;
        //Deux 'modes' de creation pour IE si l'un ne marche pas on essaie l'autre
        if(bow=='IE')
        {
            try
            {
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
             catch (e)
             {
                try
                {
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch (E)
                {
                    xmlhttp = false;
                }
            }
        }
        //Cette méthode est utilisé par tous autres navigateurs.
        else if (bow='other')
                {
                    try
                    {
                        xmlhttp = new XMLHttpRequest();
                    }
                    catch (Err)
                    {
                        xmlhttp = false;
                    }
                } 
                else
                {
                    try 
                    {
                        xmlhttp = window.createRequest();
                    } 
                    catch (e) 
                    {
                        xmlhttp=false;
                    }
                }
        return xmlhttp;
    }
    que j'apelle dans ma page avec la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <script type="text/javascript" src="../JavaScript/XHR.js"></script>
    J'ai bien vérifié les chemins. Si tu trouves je te divinifies mdr
    Je te remercie encore de ton aide en tout cas

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
     
    function Init_XHR(){
        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 hapinessIsFree()
    {
        alert(xmlhttp.readyState);
        if (xmlhttp.readyState == 4) /* 4 : état "complete" */
            if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
                alert(xmlhttp.responseText);
    }           
    var xmlhttp;
     
    function Init()
    {    
        xmlhttp=Init_XHR();
     
        if(xmlhttp==false)
        {
            alert('pas bon');
            return;
        }
        xmlhttp.onreadystatechange=hapinessIsFree;
     
        xmlhttp.open('GET', '../Test/Test.html?Message=Salut!!!!!!',false);
     
        xmlhttp.send(null);
        alert(xmlhttp.readyState);
    }
    sinon ca peut aussi venir de ta page test
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 234
    Points : 172
    Points
    172
    Par défaut
    Je viens de decouvrir un truc encore plus vicieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    function hapinessIsFree()
    {
        alert(xmlhttp.readyState);
        if (xmlhttp.readyState == 4) /* 4 : état "complete" */
            if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
                alert(xmlhttp.responseText);
     
    }           
    var xmlhttp;
     
    function Init()
    {    
        xmlhttp=Init_XHR();
     
        if(xmlhttp==false)
        {
            alert('pas bon');
            return;
        }
        xmlhttp.onreadystatechange=hapinessIsFree();
     
        xmlhttp.open('GET', '../Test/Test.html?Message=Salut!!!!!!',false);
        xmlhttp.onreadystatechange=hapinessIsFree();     
        xmlhttp.send(null);
        xmlhttp.onreadystatechange=hapinessIsFree();
    }
    Ce code la execute tels quel marche... On dirait que le onreadystatechange perd son contenu des que on l'apelle une fois.
    Alors me vient l'idee (par fameuse lol) de faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function hapinessIsFree()
    {
        alert(xmlhttp.readyState);
        if (xmlhttp.readyState == 4) /* 4 : état "complete" */
            if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
                alert(xmlhttp.responseText);
        xmlhttp.onreadystatechange=hapinessIsFree();
    }
    Sauf que dans ce ca là il y'a une boucle infinis.. Ce qui me fait penser que je ne comprend plus rien mdr...
    :$

  8. #8
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    si tu met les () ça appel de suite ta fonction sans attendre, c'est normal
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 234
    Points : 172
    Points
    172
    Par défaut
    Sans les parenthèses elle est jamais appelé. Mais ce que tu viens de me dire me donne un bon indice car l'erreur est peut être bien à un autre endroit que simplement sur cet appel.

  10. #10
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    moi c'est cette ligne qui me pose probleme quand meme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlhttp.open('GET', '../Test/Test.html?Message=Salut!!!!!!',false);
    y a quoi dans cette page ?
    et ou est elle par rapport a ta page ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     /
    --Test
      -- test.html
    --tapage
    ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  11. #11
    Membre averti Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Points : 331
    Points
    331
    Par défaut
    Je declarerais plutot la variable au debut.
    Theoriquement l utilisation de
    var pour declarer la variable fait que la variable global
    auto declare precedemment devrait etre recouverte.
    (ca depend des browsers)

    Fait un test avec un page PHP ou JSP ou autre chose (une page de code serveur)
    avec un echo (ou autre chose) voir si ta requete est bien effectue sur la page en question.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    var xmlhttp =null;
     
    function Init_XHR(){
        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 hapinessIsFree()
    {
        alert(xmlhttp.readyState);
        if (xmlhttp.readyState == 4) /* 4 : état "complete" */
            if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
                alert(xmlhttp.responseText);
    }           
     
     
    function Init()
    {    
         xmlhttp=Init_XHR();
     
        if(xmlhttp==false)
        {
            alert('pas bon');
            return;
        }
        xmlhttp.onreadystatechange=hapinessIsFree;
     
        xmlhttp.open('GET', 'http://monserverweb/pagetest.php',false);
     
        xmlhttp.send(null);
        //alert(xmlhttp.readyState);
    }

  12. #12
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    mettre la déclaration au début ou pas c'est un peu pareil quand meme
    l'important étant qu'elle soit déclarée avant l'appel a la méthode qui va l'utiliser
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  13. #13
    Membre averti Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Points : 331
    Points
    331
    Par défaut
    le mieux est encore d utilise un modele object pour eviter une variable global comme celle la.
    Je partage ton avis c est probablement pas le probleme, il faudrait valider que la requete est deja bien effectue sur la page cible du GET.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec scope "request"
    Par lion13 dans le forum JSF
    Réponses: 4
    Dernier message: 27/10/2008, 11h53
  2. Réponses: 6
    Dernier message: 22/06/2007, 15h34
  3. Problème avec xmlHttp object
    Par warmup27 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/04/2007, 19h16
  4. [Struts] - Problème avec un request.setAttribute
    Par renotm dans le forum Struts 1
    Réponses: 3
    Dernier message: 16/02/2006, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo