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 :

Port�e d'une variable


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre habitu�
    Inscrit en
    F�vrier 2011
    Messages
    12
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2011
    Messages : 12
    Par d�faut Port�e d'une variable
    Bonjour � tous,

    Je suis nouveau sur ce forum, bien que je le consulte r�guli�rement (regorgeant d'informations tr�s utiles). Aujourd'hui, j'ai grand besoin de votre aide car je bute sur un probl�me qui me parait simple mais dont je n'arrive pas � trouver la solution :

    Voici le code ( simplifi� ) :

    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
     
     
    db.transaction( function( transaction ) {
     
        var n = 0;
     
        var dataHandler = function( transaction, result ) {
            for( var i = 0; i < result.rows.length; i++ ) {
                n++; // n est bien incrémenté
            }
        };
     
        transaction.executeSql( "select ...", [], dataHandler, errorHandler );
     
        alert( n ); // affiche 0
     
    });
    Dans le code ci-dessus, je d�clare tout d'abord une variable "n" que je souhaite incr�menter pour chaque r�sultat d'une requ�te SQLite. Etant d�clar�e � l'ext�rieur de dataHandler(), cette fonction y a donc acc�s, l'incr�mentation se fait bien en mode debug mais � la sortie de la fonction, n = 0.

    Si quelqu'un saurait me dire o� est mon erreur. Merci (test� sous Safari / Chrome)


    [edit]

    Bon, j'ai un peu avanc�: en ajoutant un alert() � la fin du dataHandler :

    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
     
     
    db.transaction( function( transaction ) {
     
        var n = 0;
     
        var dataHandler = function( transaction, result ) {
            for( var i = 0; i < result.rows.length; i++ ) {
                n++; // n est bien incrémenté
            }
            alert( n ); // affiche 5
        };
     
        transaction.executeSql( "select ...", [], dataHandler, errorHandler );
     
        alert( n ); // affiche 0
     
    });
    Dans l'ordre, j'ai un alert( 0 ) suivi d'un alert( 5 ) ce qui me laisse penser que la fonction dataHandler est ex�cut�e � la fin de la transaction, ce qui finalement semble logique.

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    F�vrier 2009
    Messages
    354
    D�tails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 354
    Par d�faut
    je pense que t'as fonction transaction.executeSql, ex�cute une fonction AJAX qui est asynchrone, comme un thread...

    y'a deux fa�on de contourner le probl�me, soit tu passes une fonction de callback � t'a m�thode ajax, qui s�ex�cutera � la fin de la requ�te, soit tu fais une requ�te en mode synchrone

  3. #3
    Membre habitu�
    Inscrit en
    F�vrier 2011
    Messages
    12
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2011
    Messages : 12
    Par d�faut
    Merci pour ta r�ponse kimjoa,

    Les requ�tes SQLite (avec la fonction executeSql) doivent effectivement fonctionner de la m�me mani�re que les requ�tes AJAX (asynchrone) : Lorsque le r�sultat est obtenu, alors le handler est appel�.

    Ce qui m'am�ne au v�ritable probl�me que me pose cette fonction:
    Ce que je cherche � faire, c'est:

    - Ex�cuter une requ�te
    - Evaluer le nombre de r�sultats obtenus
    - Si ce nombre de r�sultat n'est pas suffisant
    - Alors Ex�cuter la m�me requ�te avec des contraintes plus larges
    etc

    Tout ceci de mani�re r�cursive et asynchrone.


    Je m'embrouille un peu dans la r�cursivit�
    Comment pourrais-je proc�der ?

  4. #4
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    D�cembre 2010
    Messages
    1 009
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activit� : sans emploi

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 1 009
    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
     
     
    db.transaction( function( transaction ) {
     
        var n = 0;
     
        var dataHandler = function( transaction, result ) {
            for( var i = 0; i < result.rows.length; i++ ) {
                n++; // n est bien incrémenté
            }
     
    // appel(s) recursif(s)
           if(n<10)
              transaction.executeSql( "select .... more", [], dataHandler, errorHandler );
     
        };
    //premier appel
        transaction.executeSql( "select ...", [], dataHandler, errorHandler );
     
    });

  5. #5
    Membre habitu�
    Inscrit en
    F�vrier 2011
    Messages
    12
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2011
    Messages : 12
    Par d�faut
    Willpower, merci pour le coup de main,
    Je ferai un essai demain bien que je soit septique car au moment o� l'on appelle transaction.executeSql() par r�cursivit�,
    transaction (fourni par db.transaction) n'existe plus il me semble. (?)
    Merci en tout cas !

    [edit]
    Ce que je veux dire par l� c'est qu'il paraitrait logique que la transaction � la BDD soit close et qu'il faille ouvrir une nouvelle transaction (db.transaction).
    Je ferai des tests demain

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

Discussions similaires

  1. Quelle est la port�e d'une variable dans une page ASP ?
    Par sauceaupistou dans le forum ASP
    R�ponses: 3
    Dernier message: 19/03/2007, 18h16
  2. Port� d'une variable
    Par koolkris dans le forum Delphi
    R�ponses: 3
    Dernier message: 08/03/2007, 20h29
  3. Port�e d'une variable dans une boucle FOR ?
    Par Neo41 dans le forum C++
    R�ponses: 20
    Dernier message: 17/11/2006, 11h14
  4. [XSLT] pb port�e d'une variable
    Par NPortmann dans le forum XSL/XSLT/XPATH
    R�ponses: 4
    Dernier message: 23/05/2006, 15h53
  5. Port�e d'une variable globale
    Par Giill dans le forum G�n�ral JavaScript
    R�ponses: 7
    Dernier message: 27/12/2005, 10h13

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