Chrome在请求之间删除WebSQL数据库

时间:2013-01-23 05:04:48

标签: javascript google-chrome playframework angularjs

所以我正在尝试创建一个以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的原因。

1 个答案:

答案 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 )
}