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()正常工作。
答
您错过了代码的异步行为。 由于到数据库的事务需要一些时间才能完成,所以提供了一个回调来听取成功或错误的结束。
在您的代码:
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);
});
的[可能的复制如何返回从响应异步调用?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –
你必须将“items”附加到“menu”当“结果”可用时,紧跟在事务回调中的for循环之后。 –
坦克@JoseHermosillaRodrigo for()中的append(),它的工作! –