2013-01-23 45 views
1

因此,我試圖創建一個與AngularJS作爲前端和玩的離線應用程序! 1.2.5作爲後端。在客戶端,我創建2頁 - main.html中,並且其中在提交上的login.html形式,將創建的WebSQL數據庫Chrome在請求之間刪除WebSQL數據庫

var db = openDatabase("users", "1.0", "User Database", 2*1024*1024 

一些數據是在加入並且向用戶轉發到的login.html main.html中。

的問題是,當我叫

var db = openDatabase("users", "1.0", "User Database", 2*1024*1024); 

在main.html中,我得到的數據庫,但與沒有的login.html的頁面上創建的信息。這裏發生了什麼?

編輯:下面是一些代碼

的login.html(JavaScript部分):

變種分貝= 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中:

變種分貝= 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的東西。

+0

你可以添加一個簡短的代碼片段,顯示問題? jsfiddle.net或jsbin.com將爲此工作... –

+0

更多信息,會很好。也可以考慮使用本地存儲,如果你的應用程序足夠簡單,並且不需要結構化數據等。 – adrian

回答

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) 
} 
+1

謝謝,這工作。 – kshep92