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

これは、iajax リクエスト内への両方の呼び出しが同じ -loop を参照するためiですfor。その時点で、要求が完了する (したがってiアクセスされる) と、ループは終了しi、最終的な値 here を持ちます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 に答える