2012-10-16 31 views
1

試圖實現延遲到jQuery的循環功能(。每)當我有麻煩。
問題是:我有一列有多列的行,用戶需要輸入他的數據。
現在,當用戶點擊一個按鈕保存時,所有的行需要逐一檢索,並將其數據插入到數據庫中。

1 GET插入數據並返回最後插入的ID。然後在第二個$ .get中,最後插入的id用作歷史記錄條目。

下面的代碼工作,因爲它應該,唯一的問題是整個過程的嵌套$不用彷徨開始之前被完成。因此,第二個$ .get插入的所有數據都是相同的。

功能getIdNumber從ID刪除不需要的字符(1前從row_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); 

}); 
+0

阿賈克斯是異步的,不要忘記。如果你想鏈接它們,你需要使用回調。 – Bergi

+1

你不應該發送每行一個請求,這是很多流量。你不能把它們組合起來嗎? – Bergi

+0

我可以,但是由於列表可以由用戶擴展到他想要的行數,那麼一次發送URL中的所有信息會有點棘手。我沒有試過它是誠實的,謝謝 –

回答

0

對於你的第二個$不用彷徨,而不是用你的第一個GET之前計算的值,你需要包括第一個get的數據結果中需要的第二個$ .get。這樣可以保證第二個$ .get的所有數據都與第一個的結果相關。

換句話說,不要使用amount_paid的值在你第二個$不用彷徨,而是在你的數據與最後插入ID一起返回任何需要的值。

+0

試過這個建議,但仍然是同樣的問題。 –

+0

好的,終於得到了這個工作。我不得不消除延遲,並正常工作。謝謝 ! –