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 :

Recuperer une valeur d'une fonction..


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2002
    Messages : 86
    Points : 46
    Points
    46
    Par défaut Recuperer une valeur d'une fonction..
    Bonsoir,
    Voilà, mon problème va paraître simple (enfin je l’espère), mais je galère.
    J'essais avec Jquery et html5 d'acceder à une base de donnée local, je recupere un résultat dans la fonction mais impossible pour MOI de le réutiliser autre part!

    Pour être plus explicite, mon code, qui se trouve dans un fichier .js:

    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
    function lecture_programme_lundi(id,date_sql) {
    db.transaction(function(tx) {
    tx.executeSql("select * from programme where id = ? and  jour = ?", [id,date_sql],
        function(tx, rs) {
            if (rs.rows.length>0) {
    		 var result1=rs.rows.length;
                              //ici result1 est ok!
    			return;
            }
        },
        function(tx, error) {
            alert("Problème d'accès aux données : " + error.message);
            return;
        });
    });
    }
    Et dans le js, j'appelle la fonction comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    $(document).ready(function(){
    id=2;
    DateLundi_sql='2010-10-18';
    lecture_programme_lundi(id,DateLundi_sql);
    // j'aimerai pouvoir utiliser le resultat result1 ici!
    }
    Merci pour vos aides,
    TouFou

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 79
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Ta fonction ne renvoi rien. Tu ne peux pas utiliser une variable locale à ta fonction, à l'extérieur de la fonction.
    Le plus simple c'est que tu remplaces dans ta fonction lecture_programme_lundi le par Et dans ton appel à la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var resultat = lecture_programme_lundi(id,DateLundi_sql);
    H.I.H

  3. #3
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2002
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    Bonsoir,
    Merci pour le coup de main mais cela ne fonctionne pas.

    En fait, j'avais essayé cette façon, j'ai cherché un peu avant de poster

    Je pense que cela ne fonctionne pas car le résultat que je veux est dans une sous fonction de la fonction...
    Mais la façon dont la sous fonction est appelée, je ne sais pas quoi écrire pour récupérer le résultat.
    Je pense qu'il faut faire comme tu l'a écris pour sortir le résultat de la sous fonction, et ensuite recommencer pour sortir le résultat de la fonction principale.
    mais je suis perdu dans l'écriture....
    Si tu vois comment faire, je suis preneur.

    TouFou

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 79
    Points : 50
    Points
    50
    Par défaut
    Oups.... je crois que j'avais pas bien tout lu de ton post ou sinon, c'est que j'avais bu !
    La fonction executeSQL est une fonction asynchrone.
    Je suis pas un super expert, mais voici une idée prise sur Chrome (http://code.google.com/p/lequipe-chr...pec=svn42&r=42) sur laquelle tu devrais pouvoir te baser :
    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
     
    function countUnread(fct) {
            db.transaction(function(tx) {
                    tx.executeSql("SELECT count(*) as c FROM Items Where read != ?", [true], function(tx, result) { 
                            var item = result.rows.item(0);
                            console.log(item['c']);
                            if (fct && typeof fct == "function") {
                                    fct(item['c']);
                            }
                    }, onError);
            });
    }
     
     
    function count() {
            countUnread(function(n){
                    chrome.browserAction.setBadgeText({text :n.toString()});
                    animateFlip();
            });
    }
    H.I.H
    Bon courage.

  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Dans ce genre de situations, on utilise habituellement ce qu'on appelle une fonction de callback.

    Le principe est le suivant : dans ton appel à la fonction lecture_programme_lundi, tu ajoutes un autre parametre, qui sera un objet contenant les fonctions à déclencher selon les résultats. Exemple :

    Code javascript : 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
    function lecture_programme_lundi(id,date_sql,callback) {
    db.transaction(function(tx) {
    tx.executeSql("select * from programme where id = ? and  jour = ?", [id,date_sql],
        function(tx, rs) {
            if (rs.rows.length>0) {
    		 var result1=rs.rows.length;
                     callback.succes(result1);
                     return;
            }
            else {
               callback.echec(result1);
        },
        function(tx, error) {
            alert("Problème d'accès aux données : " + error.message);
            return;
        });
    });
    }

    Et tu appelles la fonction comme ça :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    $(document).ready(function(){
       id=2;
       DateLundi_sql='2010-10-18';
       lecture_programme_lundi(id,DateLundi_sql,{
          succes: function(result1) {
             // et voilà ! ^^
          },
          echec: function(result1) {
             // par exemple, mais tu peux avoir autant de cas de figure que nécessaire, ou même bien sûr un seul
          }
       }
    });

  6. #6
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2002
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    @RomainVALERI:

    Merci, ta solution fonctionne. Par contre, j'aimerai l'améliorer....
    En fait, j'ai besoin de lancer 6 fois cette fonction et de récupérer une fois fini, les 6 résultats pour les utiliser dans une autre fonction....

    Je me dis que une fois la fonction appelée, dans le retour success, je peux rappeler une deuxième fois la fonction, puis dans son success recommencer etc... mais je ne suis pas sur que cela soit la façon la plus adequate...
    Il y a t'il une autre solution, ou bien l'embricage est-il la solution?


    @teraDev: Merci pour ton coup de main, j'ai opté pour la deuxième solution qui m'a semblé plus facile

    Bonne journée à vous,
    TouFou

  7. #7
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2002
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    En fait c'est bon, j'avais juste pas l'habitude de faire comme ca.
    Ca fonctionne très bien.

    Merci à vous deux d'avoir pris le temps de répondre.
    TouFou

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 7
    Dernier message: 26/04/2008, 10h48
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Recupere la valeur d'une ComboBox dans une autre cellule
    Par Henricoo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/06/2007, 13h56
  5. recuperer la valeur d'une variable dans une nouvlle page
    Par gloglo dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 11/01/2007, 17h08

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