javascript push()在科尔多瓦不工作

问题描述:

我有问题要获取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://*.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+0

你必须将“items”附加到“menu”当“结果”可用时,紧跟在事务回调中的for循环之后。 –

+0

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

您错过了代码的异步行为。 由于到数据库的事务需要一些时间才能完成,所以提供了一个回调来听取成功或错误的结束。

在您的代码:

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); 
});