1

だから私はフロントエンドとしてAngularJSとPlayを使ってオフラインアプリを作成しようとしています!バックエンドとして1.2.5。クライアント側では、main.htmlとlogin.htmlの2つのページを作成しました。ここで、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で作成したデータベースが表示されますが、入力したユーザーデータがありません。デフォルトのPlayを使用しています!開発Webサーバー。LightTPDを使用している場合、この問題は発生しませんが、もちろんPlayにアクセスできません。Access-Control-OriginのものによるアプリケーションDB。

4

1 に答える 1

1

挿入が実行される前に main.html に到達していると思います。WebSQL API は非同期であるため、コードがトランザクションを送信してドロップ/作成/挿入すると、アプリは待機せずに 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 に答える