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

标签 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“项目计数器”次,但始终具有相同的值(数组中的最后一个)。

这是成功函数:

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/

相关文章:

javascript - Canvas 上的多个光源

android - 如何使用一个选择列查询多个选择参数

Android/SQLite - 反引号、单引号还是双引号?

javascript - Windows 10 应用程序 - 从应用程序内启动其他应用程序或 native Windows 应用程序

javascript - 如果您不关心缩小/编译,开始使用 Google Closure?

javascript - 如何在 js 中创建一个非 block 范围的常量?

sql - 我可以在 sqlite 中插入触发器之前更新 New in 吗?

ios - Cordova 6.0 IOS 在 WebView 中加载外部 URL

javascript - 为什么这个 JavaScript 函数总是返回 'undefined'——如何解决这个问题?

javascript - REGEX - 当内部内容有换行符时 HTML 到简码中断