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 :

Undefined avec return


Sujet :

JavaScript

  1. #1
    Membre confirm� Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Par d�faut Undefined avec return
    Bonjour,

    mon code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    function inserer_utilisateur(nom_table,prefixe_table,num)
    {
    var data_form = '';
    data_form = recuperer_data(nom_table,prefixe_table,num);
    alert(data_form);
    }
    et

    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
     
    function recuperer_data(nom_table,prefixe_table,num)
    {
    // récupérer les données pour les insérer dans un formulaire
     
        xhr.open('POST','./../php/script_recuperer_data.php',true);
        xhr.onreadystatechange = function()
            {
                if ((xhr.readyState == 1)||(xhr.readyState == 2)||(xhr.readyState == 3))
                {
                }
                else if (xhr.readyState == 4)
                {
                    // si erreur session utilisateur
     
                    if (xhr.responseText == 'erreur_utilisateur')
                    {
                        parent.document.location.href=<?php echo '\'http://'.$_SERVER['HTTP_HOST'].'\''; ?>;
                    }
                    else
                    {
                    }
     
                    data_form = xhr.responseText;
                    return data_form;
                }
            }
        xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
        var data = 'nom_table='+escape(nom_table)+'&prefixe_table='+escape(prefixe_table)+'&num='+escape(num);
        xhr.send(data);
    }
    mon souci c'est que dans la premi�re fonction, le "alert" me renvoie "undefined". Et je ne vois pas pourquoi ?
    Qu'ai-je fait de mal ?
    Pour info, j'ai test� "xhr.responseText" qui me renvoi bien la valeur voulue.

    Merci !

  2. #2
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par d�faut
    Salut,

    En fait, tu fais la chose � l'envers. Tu oublies que tu fais de l'Ajax et qu'il y a un caract�re asynchrone. La premi�re fonction ex�cute la seconde, mais affiche l'alerte avant d'attendre sa r�ponse. Il faut en fait ex�cuter la seconde fonction ayant la premi�re comme callback. Voici un exemple :
    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
    62
    63
    64
    65
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
       <title>modèle de test pour les applications ajax</title>
       <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
       <style type="text/css">
       </style>
    </head>
    <body>
      <div id="json"></div>
      <script type="text/javascript">
      var FC = {
        Ajax: {
          requete: function() {
            if(window.XMLHttpRequest) { return new XMLHttpRequest(); }
            else if(window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); }
            else { return false; }
          }(),
          obtenir: function(typeDeReponse, source, fonction) {
            var requete = FC.Ajax.requete;
            if(!requete) { return false; }
            requete.onreadystatechange = function() {
              if(requete.readyState===4 && requete.status===200) {
                if(fonction) {
                  if(typeDeReponse==="xml") { 
                    fonction(FC.DOM.nettoyerDocument(requete.responseXML.documentElement)); 
                  } else { fonction(requete.responseText); }
                }
              }
            }
            requete.open("GET", source, true);
            requete.send(null);
          }
        },
        DOM: {
          nettoyerDocument: function(xmldoc) {
            var elements = xmldoc.getElementsByTagName("*");
            for(var i=0, imax=elements.length; i<imax; i++){
              var frerePrecedent = elements[i].previousSibling;
              var frereSuivant = elements[i].nextSibling;
              if(frerePrecedent && frerePrecedent.nodeType===3) { FC.DOM.nettoyerNoeud(frerePrecedent); }
              if(frereSuivant && frereSuivant.nodeType===3) { FC.DOM.nettoyerNoeud(frereSuivant); }
            }
            return xmldoc;
          },
          nettoyerNoeud: function(element) {
            if(!element.data.replace(/\s/g,'')) { element.parentNode.removeChild(element); }
          }
        }
      }
      /*FC.Ajax.obtenir("xml", "xml.xml", function(xmldoc) {
        var contenu = xmldoc.getElementsByTagName("film")[0].childNodes[1];
        alert(contenu.data);
      });
      */
      FC.Ajax.obtenir("text", "json.txt", function(json) {
        var obj = document.createElement("script");
    		obj.setAttribute("type", "text/javascript");
    		obj.text = "var o = "+ json +";";
    		document.getElementById("json").appendChild(obj);	       
        alert(o[1].p1);
      });
      </script>
    </body>
    </html>
    avec json.txt :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    [{p1:"blah",p2:"bleh"},{p1:"blih",p2:"bloh"}]

  3. #3
    Membre confirm� Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Par d�faut
    ah ouai d'accord ! j'ai pig� le truc. Bon par contre ton exemple est trop obscure pour moi. J'ai pas encore ce niveau.
    Je vais voir ce que je peux faire...

  4. #4
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Bonjour,
    comme l'a dit franculo_caoulene, il faut faire ton alert() � la r�ception de la r�ponse :
    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
        xhr.onreadystatechange = function()
            {
                if (xhr.readyState == 4)
                {
                    // si erreur session utilisateur
                    
                    if (xhr.responseText == 'erreur_utilisateur')
                    {
                        parent.document.location.href=<?php echo '\'http://'.$_SERVER['HTTP_HOST'].'\''; ?>;
                    }
                    
                    data_form = xhr.responseText;
                    alert(data_form);
                    return data_form;
                }
            }
    Et ce n'est pas
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    parent.document.location.href
    mais "location" est une propri�t� de l'objet "window" ("parent" est un objet de type "window") et non "document"

    EDIT : et pas besoin de tester les valeur de readyState diff�rentes de 4.
    En plus je crois que �a plante dans certains nav' ....

    A+

  5. #5
    Membre confirm� Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Par d�faut
    ok pour le alert() dans la premi�re fonction.
    Mais ce qui m'int�resse, c'est r�cup�rer les donn�es pour les traiter dans la deuxi�me fonction. Le alert() me permettait de tester si les donn�es �taient transmises � la deuxi�me fonction.
    merci

  6. #6
    Expert �minent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par d�faut
    Citation Envoy� par kryogen Voir le message
    Mais ce qui m'int�resse, c'est r�cup�rer les donn�es pour les traiter dans la deuxi�me fonction.
    Non : c'est ta m�thode qui n'est pas bonne.
    Ce que tu voulais faire dans inserer_utilisateur() il faut que tu le fasses dans le onreadystatechange.
    Ou alors tu passes ton Ajax en synchrone ...

    A+

  7. #7
    Membre confirm� Avatar de kryogen
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    140
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 140
    Par d�faut
    ok j'ai bien compris.
    bon bah je vais faire les choses dans l'ordre alors !
    merci !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me avec return
    Par sydius dans le forum D�buter avec Java
    R�ponses: 4
    Dernier message: 15/07/2008, 11h35
  2. thread avec return dans une boucle
    Par Tanebisse dans le forum G�n�ral Java
    R�ponses: 19
    Dernier message: 19/05/2008, 17h42
  3. Retour param�tres avec Return
    Par Basicnav dans le forum C
    R�ponses: 8
    Dernier message: 25/04/2008, 11h25
  4. this.form retourne undefined avec <a>
    Par Tchupacabra dans le forum G�n�ral JavaScript
    R�ponses: 7
    Dernier message: 11/03/2007, 09h51
  5. Probl�me avec return
    Par R�miz dans le forum G�n�ral JavaScript
    R�ponses: 16
    Dernier message: 25/08/2005, 17h15

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