1

その場でajaxリクエストを生成したいのですが、すべて完了した後にコールバックを確実に取得したいので、次のような.when.doneステートメントでラップしたいと思います。

$.when(function(){
        $.each(oOptions, function(){
            var filePath = this.filePath,
            dataType = this.dataType;

            $.ajax({
                url : filePath,
                dataType : dataType
            });
        });
    })
    .done(function(){
        console.log('success');

        console.log(arguments);
    })
    .fail(function(){
        console.log('failed');
    });

ここで、私のオプションは、同時に作成したい各ajaxリクエストのファイルパスとデータ型を含むオブジェクトの配列です。このコードは成功を返しますが、引数は単なる関数であり、ajaxリクエストは通過しません。これを行う方法について何か考えはありますか?

4

2 に答える 2

1

成功関数として、「完了」ロジックを$ .ajax呼び出し引数に入れる必要はありませんか?私はこのようなものを意味します:

$.ajax({
  url : filePath,
  dataType : dataType,
  success: function(){
    console.log('success');
  }
});

ajax呼び出しは非同期で行われるため、ajax呼び出しが完了する前にdone()を呼び出すことができます...

于 2012-02-08T15:34:23.880 に答える
1

関数を$.whenに渡しますが、1つ以上Deferredのを渡す必要があります。配列を遅延で埋めて、それを$.when引数として渡すことができます。

var deferreds = [];

$.each(oOptions, function() {
    var filePath = this.filePath,
    dataType = this.dataType;

    deferreds.push($.ajax({
        url : filePath,
        dataType : dataType
    }));
});

// use the array elements as arguments using apply
$.when.apply($, deferreds)
.done(function(){
    console.log('success');

    console.log(arguments);
})
.fail(function(){
    console.log('failed');
});
于 2012-02-08T15:36:24.693 に答える