将参数发送到Phonegap上的sqlite函数

时间:2012-07-17 13:07:30

标签: javascript sqlite cordova

我有一些包含一些物品的清单,&一个循环,我在其中检查列表中的每个项目是否都在数据库中找到(如果找不到则插入它)。

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“items counter”次,但始终具有相同的值(数组中的最后一个)。

这是成功功能:

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 个答案:

答案 0 :(得分:3)

是的,有。尝试这样的事情:

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) {