我有一个包含一些项目的列表,以及一个循环,在这个循环中我检查列表中的每个项目是否在数据库中找到(如果没有找到则插入它)。
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 +')');
}
}
所以,我想知道是否有某种方法可以在成功函数本身传递参数,或者是否有另一种方法可以逐项传递参数?
最佳答案
是的,有。尝试这样的事情:
tx.executeSql('SELECT * FROM Items Where ItemsTable.ItemId="'+itemI+'"', [],
(function(itemI){
return function(tx,results){
AddItemsToDB(tx,results,itemI);
};
})(itemI), errorCB);
并修改 AddItemsToDB
如下:
function AddItemsToDB(tx, results, itemI) {
关于javascript - 将参数发送到 Phonegap 上的 sqlite 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11523170/