1

所以我正在尝试创建一个以 AngularJS 作为前端的离线应用程序并播放!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"]);
});

主.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 中创建的数据库出现了,但我输入的用户数据不存在。我正在使用默认播放!开发网络服务器。当我使用 LightTPD 时不会出现这个问题,但是我当然无法访问我的 Play!由于 Access-Control-Origin 的东西,应用程序数据库。

4

1 回答 1

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 )
}
于 2013-01-31T20:14:32.833 回答