将变量从数组传递给Jquery POST方法

时间:2013-10-09 23:49:07

标签: javascript jquery asynchronous indexeddb ydn-db

我正在尝试从使用YDN-DB的异步IndexedDB调用获得的对象数组中传递Jquery POST方法中的变量。 基本上db.values,返回一个存储的对象数组,其中包含我想要发送到PHP脚本的信息。我可以访问IDr[i].id等记录集的任何其他字段。唯一的问题是我无法从POST的DONE方法内部访问它,所以我可以在PHP脚本成功处理后通过ID删除记录。

以下是我想要实现的,一切正常,唯一的问题是当我尝试删除已处理的记录时:

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

答案 0 :(得分: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);

  }
});