2016-05-31 127 views
0

我有問題要獲取sqlite數據Cordova-sqlite-storage Plugin並放在Cordova應用程序的菜單。javascript push()在科爾多瓦不工作

見我的代碼的一部分:

var db = window.sqlitePlugin.openDatabase({name: "test.db", location: 'default'}); 

var items = []; 

db.transaction(function(transaction) { 
transaction.executeSql('SELECT * FROM categories', [], function (tx, results) { 

    for (i = 0; i < results.rows.length; i++){ 
     items.push('<li data-page="categories" data-value="'+results.rows.item(i).cat_id+'"><a href="#"><i class="fa fa-'+results.rows.item(i).cat_icon+'"></i><em>'+results.rows.item(i).cat_title+'</em></a></li>'); 
     alert('<li data-page="categories" data-value="'+results.rows.item(i).cat_id+'"><a href="#"><i class="fa fa-'+results.rows.item(i).cat_icon+'"></i><em>'+results.rows.item(i).cat_title+'</em></a></li>'); 
    } 
}, null); 
}); 

items.push('<li data-page="categories" data-value="aaa"><a href="#"><i class="fa fa-check"></i><em>Teste</em></a></li>'); 
jQuery('.menu').append(items); 

的問題是items.push()中的()無法正常工作。爲什麼?

for()中的alert()正確顯示數據。

第二個items.push()正常工作。

+1

的[可能的複製如何返回從響應異步調用?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+0

你必須將「items」附加到「menu」當「結果」可用時,緊跟在事務回調中的for循環之後。 –

+0

坦克@JoseHermosillaRodrigo for()中的append(),它的工作! –

回答

0

您錯過了代碼的異步行爲。 由於到數據庫的事務需要一些時間才能完成,所以提供了一個回調來聽取成功或錯誤的結束。

在您的代碼:

items.push('<li data-page="categories" data-value="aaa"><a href="#"><i class="fa fa-check"></i><em>Teste</em></a></li>'); 
jQuery('.menu').append(items); 

這不是你的回調做之前調用。

爲了解決這個問題,你必須移動的代碼處理回調,其中結果可用,只是後內DOM修改行的for循環:

var db = window.sqlitePlugin.openDatabase({name: "test.db", location: 'default'}); 

var items = []; 

db.transaction(function(transaction) { 
transaction.executeSql('SELECT * FROM categories', [], function (tx, results) { 

    for (i = 0; i < results.rows.length; i++){ 
     items.push('<li data-page="categories" data-value="'+results.rows.item(i).cat_id+'"><a href="#"><i class="fa fa-'+results.rows.item(i).cat_icon+'"></i><em>'+results.rows.item(i).cat_title+'</em></a></li>'); 
     alert('<li data-page="categories" data-value="'+results.rows.item(i).cat_id+'"><a href="#"><i class="fa fa-'+results.rows.item(i).cat_icon+'"></i><em>'+results.rows.item(i).cat_title+'</em></a></li>'); 
    } 
    jQuery('.menu').append(items); 
}, null); 
});