我正在尝试从使用YDN-DB的异步IndexedDB调用获得的对象数组中传递Jquery POST
方法中的变量。
基本上db.values
,返回一个存储的对象数组,其中包含我想要发送到PHP脚本的信息。我可以访问ID
或r[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
?
谢谢!
答案 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);
}
});