2010-12-10 5 views
1

J'ai créé une application Web iPhone avec jQuery & jQTouch, qui utilise la base de données SQLite locale du navigateur Mobile Safari dans l'iPhone.Problème avec jQuery openDatabase(): la variable db n'est pas définie

L'application fonctionnait bien, jusqu'à il y a quelques jours. Tout à coup, je reçois le message d'erreur suivant lorsque vous essayez d'initialiser la base de données:

TypeError: Result of expression 'db' [undefined] is not an object. 

Cette erreur se produit tout en essayant d'exécuter le code suivant:

function openDB() {  
    db = openDatabase(dbName, '1.0', dbName);  
    db.transaction( 
     function(tx) { 
      tx.executeSql( 
       'CREATE TABLE IF NOT EXISTS energy_days ' + 
       ' ... (omitted) ... ;', 
       [], 
       nullDataHandler, 
       function(tx, error){   
        alert('Error (CREATE TABLE): '+error.message+' (Code '+error.code+')'); 
        return true; 
       } 
      ); 
     }, 
     transactionErrorHandler, 
     nullDataHandler 
    );    
} 

Bien sûr, la db variable est définie globalement.

Maintenant, ce segment de code fonctionnait. Peut-être que cela a quelque chose à voir avec la dernière mise à jour iOS 4.2? Avec cette mise à jour, tout le comportement de la base de données est devenu étrange (par exemple, ils ne sont plus visibles dans les paramètres, jusqu'à ce que vous redémarriez l'ensemble du périphérique).

Quelqu'un a-t-il une idée pour résoudre ce problème? Existe-t-il une autre façon d'initialiser un objet de base de données ou est-ce que je manque quelque chose d'évident?

Merci pour toutes les réponses, ils sont sincèrement appréciés! Roland

Répondre

0

Je pense avoir trouvé le problème avec le code ci-dessus. Comme mentionné, cela a fonctionné jusqu'à la mise à niveau vers iOS 4 (et encore dans Safari). Maintenant, il semble que la syntaxe JS de la plus récente Safari Mobile a été resserrée. En utilisant le code complet extrait de Apple's documentation (y compris le nom abrégé et le nom d'affichage, la taille, etc.), il fonctionne à nouveau dans Mobile Safari.

À la votre!
Roland

+1

Oui, plus précisément, je suppose que vous avez utilisé le nom de base de données au lieu de la taille de la base de données comme troisième paramètre. – tomdemuyt