1

以下のコードを使用して、一連の日付を繰り返し処理しています。毎回、私は ajax リクエストを作成し、xml データを返します。このデータは関数を呼び出して、ページの行に一連の div を表示します。問題は、最初の ajax 呼び出しの前にループが完了していることです。ajax リクエストと関数が完了するまで for ループを保持するにはどうすればよいですか? どんな助けでも大歓迎です!、 ありがとう

        // Start of the loop for the date range selected    

        for(loopTime = startTime; loopTime <= endTime; loopTime += 86400000)   {

        // Produce the day from the date 
                loopDate=new Date(loopTime) 
                day = loopDate.getDate() ;          if (day < 10) { day = "0" + day } ; 
                mon = loopDate.getMonth()+1   ; if (mon < 10) { mon = "0" + mon } ; 
                year = loopDate.getFullYear()       
                epDate = year + "-" + mon + "-" + day 

        // Run the XML Query ONCE ONLY 
              $.ajax({
                  type: "POST",
                  url: "php_assoc/jobs_today.php",
                  data: { OnThisDate : epDate },
                  dataType: "xml",
                  success:returnedXMLdata             
                  });

        }// for loop date




        function returnedXMLdata(data) {
            script .... 
4

2 に答える 2

6

あなたの問題はおそらくループが早く終了することではなく(それは実際には良いことです)、すべてのAJAXリクエストがほぼ即座に発生することです。

AJAXリクエストをキューに入れたい場合は、イベントハンドラー自体を使用して、以下を使用せずにループを繰り返す必要がありますfor

var loopTime = startTime;
(function iterate() {
    $.ajax(...).always(function() {
        loopTime += 86400 * 1000;
        if (loopTime <= endTime) {
            iterate();
        }
    });
})();
于 2013-03-08T16:21:53.660 に答える
3

ajax リクエスト内で、async プロパティを追加して false に設定します。

async: false,
于 2013-03-08T16:15:11.843 に答える