いくつかのアイテムを含むリストと、リスト内の各アイテムがデータベースにあるかどうかを確認するループがあります(見つからない場合は挿入します)。
function AddItems(tx)
{
for(var i = 0 ; i<itemscounter; i++)
{
itemI=itemsList[i];
tx.executeSql('SELECT * FROM Items Where ItemsTable.ItemId="'+itemI+'"', [], AddItemsToDB, errorCB);
}
}
問題は、関数がすべての反復を終了するまで待機してから sqlite ステートメントを実行するため、itemI値が常に itemsList[itemscounter] と等しくなることです。そのため、AddItemsToDB の「アイテム カウンター」の回数を入力しますが、常に同じ値 (配列の最後の値) を使用します。
これは成功関数です:
function AddItemsToDB(tx, results)
{
var len = results.rows.length;
alert(itemI); // Always has the same value!
if(len==0)
{
tx.executeSql('INSERT INTO ItemsTable (ItemId) VALUES ('+itemI +')');
}
}
それで、成功関数自体でパラメーターを渡す方法があるかどうか、またはアイテムを1つずつ渡す別の方法があるかどうか疑問に思っていますか?