2016-12-02 1 views
0

Dieser Code muss die Dinge, die ich der Tabelle hinzufügen, warnen. Er alarmiert nicht den Wert der Variablen "hallo". Weißt du, was in diesem Code falsch ist?Verwenden von Variablen in Web-SQL

<html> 
<body> 
    <script> 
     var db = openDatabase('neueDb', '1.0', "Test DB", 2 * 1024 * 1024); 
     var hallo = "hallo1234"; 

      db.transaction(function (tx) { 
       tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (log)'); 
       tx.executeSql('INSERT INTO LOGS (log) VALUES ("foobar")'); 
       tx.executeSql('INSERT INTO LOGS (log) VALUES ("logmsg")'); 
       tx.executeSql('INSERT INTO LOGS (log) VALUES (?)', hallo); 
      }); 

      db.transaction(function (tx) { 
       tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 
         var len = results.rows.length, i; 

         for (i = 0; i < len; i++) { 
          alert(results.rows.item(i).log); 
         } 
       }, null); 
     }); 
    </script> 
</body> 

Danke für alle Antworten! In Liebe, Dexter

Antwort

1

Sie vermissen die Idee, dass db.transaction asynchron ist.

Sie erwarten, dass zuerst alle Zeilen eingefügt werden und dann ausgewählt werden. Das passiert nicht wirklich.

Dies ist roughtly, was Sie brauchen:

b.transaction(function (tx) { 
     tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (log)'); 
     tx.executeSql('INSERT INTO LOGS (log) VALUES ("foobar")'); 
     tx.executeSql('INSERT INTO LOGS (log) VALUES ("logmsg")'); 
     tx.executeSql('INSERT INTO LOGS (log) VALUES (?)', [hallo]); 
     tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 
        var len = results.rows.length, i; 

        for (i = 0; i < len; i++) { 
         alert(results.rows.item(i).log); 
        } 
      }, null); 
    }); 

Natürlich tx.executeSql('SELECT * FROM LOGS' idealerweise in einer anderen Funktion eingewickelt werden soll.

Beachten Sie auch @Jorge Kommentar in Bezug auf die Syntax, die Sie verwenden.

+0

Für mich funktioniert Ihr Code auch nicht. Geben Sie den Fehler, den ich in meiner Antwort angegeben habe, wenn Sie 'hallo' eingeben. – Jorge

1

Für mich in Chrome erhalte ich einen Fehler, wenn tx.executeSql('INSERT INTO LOGS (log) VALUES (?)', hallo);

VM109:1 Uncaught TypeError: Failed to execute 'executeSql' on 'SQLTransaction': The 2nd argument is neither an array, nor does it have indexed properties.(…)

Ich weiß nicht, warum die Ausführung, die ich noch nie diesen Fehler hatte. Aber wenn ich tun db.transaction(function (tx) { tx.executeSql('INSERT INTO LOGS (log) VALUES (?)', [hallo]); }) es funktioniert korrekt, und dann zeigt die Warnung hallo Wert OK.

Ich denke, Sie haben einen Fehler beim Einfügen des Werts und deshalb wird es nicht alarmiert.

+0

Vielen Dank für diese Korrektur. –

+0

Kein Problem !! Für mich ist das ein komisches Verhalten ... Ich werde versuchen herauszufinden warum. – Jorge