2013-06-11 38 views
2

我有这样的代码:JQuery的for循环中,等待函数完成

for(var hour = -1; hour > -24; hour--) 
    $.getJSON(url + hour, function(data) { 
     //... 
    }); 
} 

我需要使用小时变量在我的getJSON功能。但它首先通过for循环。它确实小时= -1,-2,-3 ...等。

然后最后它确实$ .getJSON(url + -24)。我想它$ .getJSON(url + -1),-2等,并使用该变量仍然在函数内。

+0

它实际上正在进行每个调用,但它是异步执行的。显然,您希望处理同步发生,这表明Javascript/AJAX可能不是您的问题的最佳解决方案。 – keithhatfield

回答

3

我会用递归回调函数一样

function recurseJSON(hour) { 
    if (hour < -24){ 
     return; 
    } 
    $.getJSON(url + hour, function (data) { 
     //... 
     recurseJSON(hour-1); 
    }); 
} 
2

的问题是$ .getJSON方法是异步的。您的代码不会等到for循环结束以完成$ .getJSON调用;相反,您的代码在完成之前继续通过呼叫。

解决这一问题的方法是改变$ .getJSON调用到$就调用是这样的:

$.ajax(
    url:url + hour, 
    async:false, 
    dataType:'json', 
    success:function(data) { 
     //... 
    } 
}); 

$就允许添加在那里async:false,使Ajax调用同步。