2016-12-02 2 views
0

этот код должен предупреждать вещи, которые я добавляю в таблицу. Он не предупреждает значение переменной «hallo». Вы знаете, что не так в этом коде?Использование переменных в 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> 

Спасибо за все ответы! In Love, Dexter

ответ

1

Вам не хватает идеи, что db.transaction является асинхронным.

Вы ожидаете, что сначала он вставляет все ваши строки, а затем выберет их. Это не то, что происходит на самом деле.

Это roughtly то, что вам нужно:

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

Конечно tx.executeSql('SELECT * FROM LOGS' в идеале должны быть обернуты в другой функции.

Также обратите внимание на комментарий @Jorge относительно используемого вами синтаксиса.

+0

Для меня ваш код также не работает. Предоставляя ошибку, я указал в своем ответе при вводе значения 'hallo'. – Jorge

1

Для меня, в Chrome я получаю сообщение об ошибке при выполнении 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.(…)

Я не знаю, почему, я никогда не имел эту ошибку раньше. Но если я делаю db.transaction(function (tx) { tx.executeSql('INSERT INTO LOGS (log) VALUES (?)', [hallo]); }), он работает правильно, а затем появляется предупреждение hallo значение ОК.

Я думаю, что у вас есть ошибка, вставляющая значение, и поэтому он не получает предупреждения.

+0

Благодарим вас за эту коррекцию. –

+0

Без проблем !! Для меня это странное поведение ... Я постараюсь выяснить, почему. – Jorge

Смежные вопросы