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