所以我正在尝试创建一个以AngularJS作为前端和Play的离线应用! 1.2.5作为后端。在客户端,我创建了2个页面 - main.html和login.html,在login.html上提交表单后,创建了一个WebSQL数据库
var db = openDatabase("users", "1.0", "User Database", 2*1024*1024
添加了一些数据,用户转发到main.html。
问题在于我打电话
var db = openDatabase("users", "1.0", "User Database", 2*1024*1024);
在main.html上,我获取了数据库但没有在login.html页面上创建的信息。这是怎么回事?
编辑:以下是一些代码
login.html(JavaScript部分):
var db = window.openDatabase(“myDB”,“1.0”,“示例数据库”,2 * 1024 * 1024);
db.transaction(function(tx) {
tx.executeSql("drop table if exists users");
tx.executeSql("create table users (id unique, name)");
tx.executeSql("insert into users (id, name) values (?, ?)", [1, "Kevin"]);
});
main.html中:
var db = window.openDatabase(“myDB”,“1.0”,“示例数据库”,2 * 1024 * 1024);
db.transaction(function(tx) {
tx.executeSql("select * from users", [], function(tx, results) {
for(i=0; i<results.rows.length; i++) {
var u = {
id: results.rows.item(i).id,
name: results.rows.item(i).name,
}
console.log(u); //Nothing gets returned. Database in Resources tab is empty; no users!
}
});
});
我在index.html中创建的数据库显示,但我输入的用户数据不存在。我正在使用默认播放!开发Web服务器。当我使用LightTPD时不会出现此问题,但当然我无法访问我的Play!应用程序数据库由于Access-Control-Origin的原因。
答案 0 :(得分:1)
我认为在插入可以执行之前你会进入main.html。请记住,WebSQL API是异步的,因此当您的代码将事务发送到drop / create / insert时,您的应用程序将不会等待并直接进入main.html(如果您没有使用回调来更改页面)。
您需要做的是发送事务并等待回调(onSuccessSql)更改为main.html。这是一个例子:
db.transaction(function(tx){
tx.executeSql( "insert into users (id, name)...", onSuccessSql, onError)},
onError, onReadyTransaction);
function onReadyTransaction( ){
console.log( 'Transaction completed' )
}
function onSuccessSql( tx, results ){
//go to main.html()
}
function onError( err ){
console.log( err )
}