0

我发现我得到这个输出很奇怪:

Wait..
Request 2 Complete.
Request 2 Complete.

在一个简单的 for 循环中:

for (var i = 0, j = urls.length; i < j; i += 1) {
    $.ajax({
        url: urls[i],
        dataType: 'jsonp',
        complete: function() {
            log.append('Request ' + i + ' Complete.' + "\n");
            if (i == (j - 1)) {
                log.append('Done.');
            }
        }
    });

}

为什么i总是等于2

4

2 回答 2

6

这是因为i在您的 ajax 请求中的两个调用都引用了相同ifor-loop。在某个时间点,当请求完成(并因此i被访问)时,循环已终止并i具有最终值,此处为2.

我想你会寻找这样的东西:

for (var i = 0, j = urls.length; i < j; i += 1) {
  !function( i ){
    $.ajax({
        url: urls[i],
        dataType: 'jsonp',
        complete: function() {
            log.append('Request ' + i + ' Complete.' + "\n");
            if (i == (j - 1)) {
                log.append('Done.');
            }
        }
    });
  }( i );
}

通过将 的值传递i给立即执行的函数,您可以创建相应值的副本i以在 ajax-requests 中使用。

于 2013-01-06T13:51:17.143 回答
0

尝试使用

     async = false;
in ajax request
于 2013-01-06T13:52:26.300 回答