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.