Во-первых, я знаю, что WebKit не позволяет делать синхронные запросы к базе данных SQLite. И я начал играть с ним и попытался присвоить результат глобальной переменной «data». Я все еще не уверен, возможно ли это, но хочу спросить вас.
Я создал глобальный объект для хранения ответа из БД
var data = {};
Вот класс БД
var db = {
mydb: false,
init: function () {
try {
if (!window.openDatabase) {
alert('not supported');
} else {
this.mydb = openDatabase('test_db', '1.0', 'Test DB', 1024*1024*5);
}
} catch(e) {
// Error handling code goes here.
if (e == INVALID_STATE_ERR) {
// Version number mismatch.
alert('Invalid database version.');
} else {
alert('Unknown error '+e+'.');
}
return;
}
},
exec: function (query, params) {
try {
this.mydb.transaction(function(transaction) {
transaction.executeSql(query, params, db.dataHandler, db.errorHandler);
});
} catch(e) {
alert(e.message);
}
},
dataHandler: function (transaction, results) {
// Handle the results
data = results.rows;
return true;
},
errorHandler: function (transaction, error) {
// returns true to rollback the transaction
alert('Code: '+error.code+'\nMessage: '+error.message);
return true;
},
}
- И, наконец, вот проблема:
$(function () {
db.init();
db.exec('SELECT * FROM errors;');
alert(Log.object_toString(data) ); // this alert show empty object as I declared in first line
alert(Log.object_toString(data) ); // this one return object with responded data from database
});
Так что проблема в том, что я не могу манипулировать «данными» сразу после вызова db.exec (), но если я сделаю alert () после транзакции, тогда данные будут заполнены всей информацией.
Есть идеи, как мне этого избежать?