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 :

Récupération valeur retour d'une fonction Javascript


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Points : 50
    Points
    50
    Par défaut Récupération valeur retour d'une fonction Javascript
    Bonjour,
    Je sollicite votre aide afin de comprendre un petit problème assez simple :
    - j'ai une page JSP pour saisir des paramètres et un bouton de calcul qui affiche un résultat sur cette même page.

    Les fonction Javascript associées au bouton sont les suivantes :

    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
     
    function calculerCo2(){ 
    var distance  = document.getElementById("distance").value;
    var duree     = document.getElementById("duree").value;
     
    var co2       = Co2calc(distance, duree);	
    // alert("co2 : " + co2);
     
    document.getElementById("co2").value = co2;
    }
     
    function Co2calc(dist, dur){
    	var request = null;
     
    	try {
            request = new XMLHttpRequest();  
            }catch (e){
            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            }catch (e) {
                alert("XMLHttpRequest error: " + e);}
            }
     
            request.open("POST", "calculco2.calc");   
     
            var par= "distance=" + dist + "&" + "duree=" + dur;
     
            request.setRequestHeader("Content-type", "application/x-www-form-
            urlencoded");
     
            request.send(par);  
     
            var calc_co2 = 0;
            var resultat   = 0;
     
            request.onreadystatechange = function(){
    	   if(request.readyState == 4 && request.status == 200){
    		   resultat   = request.responseText;
    		   calc_co2 = Math.round(resultat*1000)/1000;}
            };
     
           // alert("calc_co2 : " + calc_co2);
              return calc_co2;
    }
    Le problème est que le résultat obtenu est égale à 0 dans ma page JSP.
    Hors, si j'active les alert(), j'obtiens les messages suivant :
    calc_co2 : 0
    co2 : 4.09
    et ma page JSP affiche bien le bon résultat (4.09)

    Je n'y comprends plus rien.

    Je pensais avoir bien codé la récupération de la valeur de retour de la fonction Co2calc() dans la variable co2.

    Est-ce un problème de codage en Javascript ou de déclaration de variables ?
    Je ne suis pas un expert en Javascript, mais j'ai codé comme les exemples trouvés sur lnternet.

    Si vous pouvez m'aider à résoudre ce problème, je vous en remercie par avance pour vos réponses.

    ejazz75

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Points : 50
    Points
    50
    Par défaut Récupération valeur retour d'une fonction Javascript
    Merci Bovine pour ta réponse. J'ai bien lu ton lien.
    Je comprends bien la "chronologie" des alert(), mais pourquoi je ne récupère pas le bon résultat au deuxième passage. L'affectation du résultat à la variable de retour est bien faite pourtant.
    J'ai effectué le test en mode asynchrone ou synchrone, j'obtiens les mêmes résultats.
    Que dois-je modifier dans mon code pour être propre et conforme aux règles de codage ?
    Merci pour ton aide.
    ejazz75

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Merci Bovine
    Tu commets beaucoup d'erreurs de conception dans ton code.
    Tes variables co2 et Co2calc sont locales (déclarées dans le corps de la fonction) or comme les fonctions n'attendent pas le retour de la requête AJAX pour continuer leur exécution, Co2calc() renvoie 0 et calculerCo2() affecte ce 0 à co2. Puis les fonctions terminent leur exécution et les variables locales sont détruites. Donc à aucun moment tu n'affectes le bon résultat et la valeur n'existe ni au premier passage ni aux suivants !
    La seule différence qu'il y a avec les alert() est que ces messages bloquent l'exécution des fonctions et laissent donc le temps à la requête de renvoyer un résultat.
    J'ai effectué le test en mode asynchrone ou synchrone, j'obtiens les mêmes résultats.
    Tu as dû faire aussi des erreurs en mode synchrone...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Points : 50
    Points
    50
    Par défaut Récupération valeur retour d'une fonction Javascript
    Je suis sincèrement désolé pour l'erreur de frappe concernant ton nom.
    Ce n'est pas dans mon intention de t'insulter.
    J'ai même testé le passage des variables en global, mais les résultats sont les mêmes. Alors comment faire pour que les fonctions attendent le retour de la requête AJAX pour continuer leur exécution. J'ai cru comprendre que cela se faisait sur le 3ème argument dans l'instruction request.open().
    J'ai du faire toute les combinaisons de code pour récupérer le bon résultat, mais c'est un échec total depuis 2 jours!!!
    Je peux comprendre que tu ne puisses pas m'orienter d'avantage, et je te remercie pour l'aide apportée jusqu'à maintenant.
    ejazz75

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/05/2012, 06h55
  2. Réponses: 4
    Dernier message: 06/09/2010, 15h37
  3. Réponses: 4
    Dernier message: 07/04/2007, 20h02
  4. Envoyer une valeur génerée par une fonction javascript
    Par karimphp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/12/2006, 18h44
  5. comment recuperer une valeur retournée d'une fonction javascript?
    Par megapacman dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 13/06/2006, 14h53

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