2013-06-11 35 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調用同步。