我有这样的代码:
for(var hour = -1; hour > -24; hour--)
$.getJSON(url + hour, function(data) {
//...
});
}
我需要在我的 getJSON 函数中使用小时变量。但它首先通过 for 循环。它确实小时 = -1, -2, -3... 等等。
最后它执行 $.getJSON(url + -24)。我希望它 $.getJSON(url + -1)、-2 等,并在函数内部使用该变量。
我有这样的代码:
for(var hour = -1; hour > -24; hour--)
$.getJSON(url + hour, function(data) {
//...
});
}
我需要在我的 getJSON 函数中使用小时变量。但它首先通过 for 循环。它确实小时 = -1, -2, -3... 等等。
最后它执行 $.getJSON(url + -24)。我希望它 $.getJSON(url + -1)、-2 等,并在函数内部使用该变量。
我会使用递归回调函数,如
function recurseJSON(hour) {
if (hour < -24){
return;
}
$.getJSON(url + hour, function (data) {
//...
recurseJSON(hour-1);
});
}
问题是 $.getJSON 方法是异步的。您的代码不会等到 for 循环结束才进行 $.getJSON 调用;相反,您的代码在完成之前继续通过调用。
解决此问题的一种方法是将 $.getJSON 调用更改为 $.ajax 调用,如下所示:
$.ajax(
url:url + hour,
async:false,
dataType:'json',
success:function(data) {
//...
}
});
$.ajax 允许在async:false其中添加以使 ajax 调用同步。