私はそれがすべきことをしているように見えるこの関数を持っています:
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;
}
console.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>');
};
おそらく同じ理由で、これは機能しません。jQueryから試し$.each()
ても、ループには何も入りません。これらのループの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
。私はこれにいくつかの甘い時間を費やし、他に何かアイデアがあるかどうか疑問に思いました。
これはChrome18.0.1025.151(Firefoxにはsqliteがありません)でテストされており、最終的にはjQuery MobileとPhoneGapを搭載した電話に移行しますが、まだその時点ではありません。sqliteデータベースを備えた単純なHTMLページ。
ありがとう!