2012-08-07 42 views
0

我需要在我的each()完成其中的所有任務後顯示一些文本。但它似乎在運行異步和「完成」。顯示得太早。我試圖使用延遲,但沒關係。正如您所看到的,我將成功和失敗信息發送到顯示哪些記錄已保存或失敗的模式。所有$ ajax調用完成後,'完成'需要到來。任何幫助將不勝感激。

$(".QueueGrid tbody > tr").each(function() { 
     dcn = ""; 
     if ($(this).find(".chkOtherSelected").prop("checked")) { 
      claimnum = $(this).find("td:eq(2)").text(); 
      dcn = $(this).find("td:eq(5)").text(); 
      $.ajax({ 
       type: "POST", 
       url: "Approval_Inbox.aspx/SaveNote", 
       data: "{dcn:'" + dcn + "',note:'" + note + "'}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       cache: false, 
       timeout: 8000, 
       beforeSend: function() { 
        str = "- " + dcn + "<br />"; 
       }, 
       success: function (data) { 
        _savedSucess += str; 
       }, 
       error: function() { 
        _savedFail += str; 
       }, 
       complete: function (data) { 
        $("#divMassMessage").fadeIn("fast"); 
        $("#divMassMessage").center(); 
        $('#MainContent_savedSucess').html(_savedSucess); 
        $('#MainContent_savedFail').html(_savedFail); 
       } 
      }); 
     } 
    }); 
    $(".saveComplete").html("done."); 
+0

您應該重新考慮您的方法,並在一個ajax請求中完成整個事情,而不是一個好主意來循環ajax請求,除非您100%確定這是行爲和唯一解決方案來解決您的需求。 – 2012-08-07 20:17:34

回答

0

AJAX,但其性質各異,是異步的。你可以強制它是同步的(async:false),但是這會在請求期間鎖定瀏覽器。

或者,您可以統計發出的請求數量,然後每次調用完成的函數。計算完成次數以及與呼叫次數相匹配的次數時,觸發警報。

+0

你和Micah都給了我正確的答案。謝謝! – AlbertListy 2012-08-07 21:30:09

0

在AJAX完整函數中,您可能能夠檢查this是否是您正在解析的元素數組的最後一個成員,即獲取$().each數組中元素數的計數,並檢查當前元素等於數組的長度。如果是,寫完成的消息。如果不是的話,還有更多元素可以循環使用。

+0

完美。謝謝! – AlbertListy 2012-08-07 21:28:48