我正在使用下面的代码迭代一系列日期。每次,我发一个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 ....
答案 0 :(得分:5)
你的问题可能不是循环早完成(这实际上是一件好事),但所有的AJAX请求几乎都会立即被解雇。
如果您希望将AJAX请求排入队列,则需要使用事件处理程序本身进行循环迭代,而不使用for
:
var loopTime = startTime;
(function iterate() {
$.ajax(...).always(function() {
loopTime += 86400 * 1000;
if (loopTime <= endTime) {
iterate();
}
});
})();
答案 1 :(得分:3)
在ajax请求中,添加一个async属性并将其设置为false。
async: false,