首先我知道WebKit不允许向SQLite数据库发出同步请求。我开始玩它,并试图将结果分配给全局变量“数据”。我仍然不确定是否有可能,但想问你。Javascript全局变量问题
我创建的全局对象来存储来自DB
var data = {};
这里回应是DB类
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()调用之后对“数据”操纵,但如果我的交易后,使警报(),则数据将与所有信息填充。
任何想法如何避免它?
这是HTML5,没有涉及AJAX,但它是异步的:) – 2010-11-11 20:28:41
谢谢@尼克。在黑暗中是一枪。我真的必须加快HTML5的速度。 :o) – user113716 2010-11-11 20:30:11
看起来他正在使用本地数据库。这并不重要,它仍然是异步的。我认为'exec'应该接受一个回调函数参数,它传递给它的从属函数。 *编辑:* Nick击败了我:p – 2010-11-11 20:30:54