2010-12-10 5 views
1

Ich habe eine iPhone Web App mit jQuery & jQTouch erstellt, die die lokale SQLite-Datenbank des Mobile Safari-Browsers im iPhone nutzt.Problem mit jQuery openDatabase(): variable db ist undefined

Die App lief großartig, bis vor ein paar Tagen. Plötzlich erhalte ich die folgende Fehlermeldung angezeigt, wenn Sie versuchen, die Datenbank zu initialisieren:

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

Dieser Fehler tritt beim Versuch, den folgenden Code auszuführen:

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 
    );    
} 

Natürlich ist die Variable db ist global definiert.

Jetzt funktionierte dieses Codesegment. Vielleicht hat das etwas mit dem neuesten iOS 4.2 Update zu tun? Mit diesem Update wurde das gesamte Datenbankverhalten merkwürdig (z. B. sind sie in den Einstellungen nicht mehr sichtbar, bis Sie das gesamte Gerät neu starten).

Hat jemand eine Idee, wie man das beheben kann? Gibt es eine alternative Möglichkeit, ein Datenbankobjekt zu initialisieren oder fehlt mir etwas Offensichtliches?

Vielen Dank für alle Antworten, sie sind herzlich willkommen! Roland

Antwort

0

Ich glaube, ich habe das Problem mit dem obigen Code gefunden. Wie gesagt, es funktionierte bis zum Upgrade auf iOS 4 (und tut es auch in Safari). Jetzt scheint es, dass die JS-Syntax des aktuellsten Safari Mobile verschärft wurde.

Mit dem vollständigen Code, der von Apple's documentation (einschließlich Kurz- und Anzeigename, Größe usw.) abgeschnitten wurde, funktioniert es wieder in Mobile Safari.

Prost!
Roland

+1

Ja, genauer gesagt, ich nehme an, dass Sie db name anstelle der Größe der db als dritten Parameter verwendet haben. – tomdemuyt