0

POSTYDN-DB を使用した非同期 IndexedDB 呼び出しから取得したオブジェクト配列からJquery メソッド内の変数を渡そうとしています。基本的db.valuesに、PHP スクリプトに送信したい情報を格納したレコードのオブジェクト配列を返します。IDまたは のようなレコード セットの他のフィールドにアクセスできますr[i].id。唯一の問題は、POST のメソッドの内部からアクセスできないため、PHP スクリプトによって正常に処理された後にDONEレコードを削除できることです。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ますか? その配列の位置を使用する代わりに、処理されたレコードを削除する方法はありますか?

ありがとう!

4

1 に答える 1

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

  }
});
于 2013-10-09T23:53:15.200 に答える