1

我正在使用下面的代码遍历一系列日期。每次,我发出一个 ajax 请求并返回 xml 数据,然后调用一个函数在我的页面上的一行上显示一系列 div。问题是我的循环甚至在第一次 ajax 调用之前就完成了,我怎样才能保持 for 循环直到我的 ajax 请求和函数完成?非常感谢任何帮助!, 谢谢

        // 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 回答