2013-10-09 77 views
0

我想從使用YDN-DB從異步IndexedDB調用中獲得的對象數組傳遞一個Jquery POST方法中的變量。 基本上db.values返回一個記錄的對象數組,其中存儲了我想要發送給PHP腳本的信息。我可以訪問ID或記錄集的任何其他字段,如r[i].id。唯一的問題是我無法從POST的DONE方法中訪問它,所以我可以在它被PHP腳本成功處理後將其刪除記錄的ID將一個變量從一個數組傳遞給一個Jquery POST方法

下面是我想要什麼來實現的,一切正常,唯一的問題是,當我嘗試刪除處理記錄:

var req = db.values('table'); 
req.done(function(r){ 
    for(i=0;i<r.length;r++){ 
     var post = $.post('myscript.php', {'sale[]': $.toJSON(r[i])}); 
     post.done(function(data){ 
      if(data == 'ok'){ 
       db.remove('table',r[i].id); 
      } 
     }); 
    } 
}); 

有沒有辦法做到這一點,並獲得了該ID處理的記錄被刪除,而不是使用其陣列的位置?

謝謝!

回答

1

問題是回調函數的閉包在所有迭代中捕獲相同的i變量,所以當調用回調函數時,i的值已經通過了數組的最後一項。您可以將代碼包裝在函數內部的循環中,爲每次迭代創建一個單獨的i變量:

var req = db.values('table'); 
req.done(function(r){ 
    for(i=0;i<r.length;r++){ 

    (function(i){ 

     var post = $.post('myscript.php', {'sale[]': $.toJSON(r[i])}); 
     post.done(function(data){ 
     if(data == 'ok'){ 
      db.remove('table',r[i].id); 
     } 
     }); 

    })(i); 

    } 
}); 
+0

謝謝,它的工作原理! –

相關問題