JQuery for循环,等待函数完成

时间:2013-06-11 20:25:42

标签: jquery

我有这样的代码:

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等,并在函数内部使用该变量。

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调用同步。