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

4

2 回答 2

3

我会使用递归回调函数,如

function recurseJSON(hour) {
    if (hour < -24){
        return;
    }
    $.getJSON(url + hour, function (data) {
        //...
        recurseJSON(hour-1);
    });
}
于 2013-06-11T20:30:47.760 回答
2

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

解决此问题的一种方法是将 $.getJSON 调用更改为 $.ajax 调用,如下所示:

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

$.ajax 允许在async:false其中添加以使 ajax 调用同步。

于 2013-06-11T20:30:56.810 回答