首先我知道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