1

jQueryループ関数(.each)に遅延を実装しようとすると問題が発生します。
問題は次のとおりです。ユーザーがデータを入力する必要がある、複数の列を持つ行のリストがあります。
これで、ユーザーが[保存]ボタンをクリックすると、すべての行を1つずつ取得し、それらのデータをデータベースに挿入する必要があります。

最初のgetはデータを挿入し、最後に挿入されたIDを返します。次に、2番目の$ .getで、最後に挿入されたIDが履歴エントリとして使用されます。

以下のコードは正常に機能します。唯一の問題は、ネストされた$.getが開始する前にプロシージャ全体が終了していることです。したがって、2番目の$.getによって挿入されるすべてのデータは同じです。

関数getIdNumberは、IDから不要な文字を削除します(例:row_1から1)

$('.data_row').each(function(i){
    id = getIdNumber(this.id);

    setTimeout(function() {

    date = $('#dat_'+id).val();
    customer = $('#cus_'+id).val();
    amount_paid = $('#amt_'+id).val();
    remarks = $('#rem_'+id).val();
    account = $('#acc_'+id).val();

       url = "bin/_receipts.php?addreceipts=&date="+date+"&customer="+customer+"&amountpaid="+amount_paid+"&remarks="+remarks+"&paidaccount=" + account;

       $.get(url, function(d){

          url2 = "bin/_ledgerHandler.php?addaudittrail=&user="+escape("<? echo $_SESSION["user_id"]; ?>")+"&trantype="+escape("Receipt - "+d+"")+"&val="+escape(amount_paid)+"&category=receipts";
          $.get(url2, function(){  

          });                    

       });         

    }, 1000*i);

 });
4

1 に答える 1

0

2番目の$.getでは、最初のgetの前に計算した値を使用するのではなく、最初のgetのデータ結果に2番目の$.getが必要とするすべてのものを含める必要があります。このようにして、2番目の$.getのすべてのデータが最初の結果に関連していることを保証できます。

つまり、2番目の$ .getでamount_paidの値を使用せず、代わりに、最後の挿入IDとともにデータ内の必要な値を返します。

于 2012-10-16T09:03:36.723 に答える