我有这个功能似乎正在做它应该做的事情:
var getData = function(query)
{
var data = [];
db.transaction(function(tx) {
tx.executeSql(query, [], function (tx, results) {
var len = results.rows.length, i;
for (i = 0; i < len; i++) {
data.push(results.rows.item(i));
}
}, error);
});
return data;
}
当我执行 aconsole.log(data)
时,它会显示一个包含正确数据的对象数组,如您在 Chrome 控制台的示例中所见:
但是,data.length 为 0,因此无法迭代。我试过了
for(var i = 0; i < data.length; i++) {
$('.regions').append(data[i].region + '<br>');
};
这不好,因为 data.length 为 0。我试过了
for(var key in data) {
$('.regions').append(data[key].region + '<br>');
};
这不起作用,大概是出于同样的原因。我什至尝试过$.each()
使用 jQuery,但没有任何东西进入循环。我console.log(data)
在这些循环之前做了一个正确的检查,以仔细检查它是否仍然具有我所期望的数据。我手动手动重新创建了数据
data = [
{
available: "1",
company_id: 1,
cultivar: "Cultivar 2.0",
cultivar_id: 18,
id: 18,
image: "b0c2dd4765422fc0acce9461a040ebaf.png",
logo: "980f2a610d681ade5b5b42511f89655c.png",
maintenance: "Fairway",
maintenance_id: 7,
name: "Cultivar 2.0",
region: "Midwest",
region_id: 24,
species: "Perennial Ryegrass",
species_id: 7,
trait_disease: "Disease 2",
trait_disease_id: 6,
available: "1"
},
{
company_id: 1,
cultivar: "Cultivar 2.0",
cultivar_id: 18,
id: 18,
image: "b0c2dd4765422fc0acce9461a040ebaf.png",
logo: "980f2a610d681ade5b5b42511f89655c.png",
maintenance: "Fairway",
maintenance_id: 7,
name: "Cultivar 2.0",
region: "Midwest",
region_id: 24,
species: "Perennial Ryegrass",
species_id: 7,
trait_disease: "Disease 2",
trait_disease_id: 6
}
];
这种类型的东西在控制台中看起来完全一样,但是当我迭代它时它就起作用了。我在 StackOverflow 周围做了一些其他的事情,包括确保它确实被识别为一个数组。
即使我知道长度,data[0]
是undefined
。我在这上面花了一些甜蜜的时间,想知道是否还有其他任何想法。
这已经在 Chrome 18.0.1025.151 中进行了测试(Firefox 没有 sqlite),它最终会在带有 jQuery Mobile 和 PhoneGap 的手机上运行,但我们还没有到那个时候。只是一个带有 sqlite 数据库的简单 HTML 页面。
谢谢!