2012-07-17 18 views
3

我有一個項目列表,&一個循環,其中我檢查列表中的每個項目是否在數據庫中找到(如果沒有找到它,插入它)。發送參數到電話號碼上的sqlite函數

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 +')'); 


     } 
} 

所以,我想知道是否有在成功函數本身來傳遞參數的一些方法,或者如果有一個傳遞的項目之一的另一種方法?

回答

3

是的,有is.Try是這樣的:

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

萬分感謝。它終於奏效了。 Reaalllyyy Thaannkkks =)) – 2012-07-17 15:23:50