1. ホーム
  2. jquery

[解決済み] jQuery.whenの理解

2022-02-10 04:31:57

質問内容

を使おうとしています。 jQuery.when を2つ発射するために ajax をリクエストし、2つのリクエストが完了した後に何らかの関数を呼び出します。以下は私のコードです。

var count = 0;
var dfr;

var showData = function(data) {
    dfr.resolve();
    alert(count);
   // Do something with my data data received
};

var method1 = function() {
    dfr = $.Deferred();

    return $.ajax('localhost/MyDataService/DataMethod_ReturnsData', {
        dataType: "jsonp",
        jsonp: "$callback",
        success: showData
    });
};

var method2 = function() {
    return $.ajax('localhost/MyDataService/DataMethod_ReturnsCount', {
        dataType: "jsonp",
        jsonp: "$callback",
        success: function(data) {
            count = data.d.__count;
        }
    });
};

$.when(method1(), method2())
    .then(showData());

しかし、これは期待通りに動作しません。でのAjax呼び出しは method1 で使用されるデータが返されます。 showData() でのAjaxコールと method2 はcountを返し、これはvar countに代入され、後で showData() .

しかし、上記のコードを発射すると method1 が呼び出され、その後 method2 で、次に showData にデータを残したまま showData として 'undefined' . これを実現するには $.when これは、私の知る限り、両方の関数が $.promise が実行されます。私は、両方のajaxコールが並行して呼び出され、両方のコールからの結果に基づいて後で結果が表示されるようにしたいです。

解決方法は?

function showData(data1, data2) {
    alert(data1[0].max_id);
    alert(data2[0].max_id);
}

function method1() {
    return $.ajax("http://search.twitter.com/search.json", {
        data: {
            q: 'ashishnjain'
        },
        dataType: 'jsonp'
    });
}

function method2() {
    return $.ajax("http://search.twitter.com/search.json", {
        data: {
            q: 'ashishnjain'
        },
        dataType: 'jsonp'
    });
}

$.when(method1(), method2()).then(showData);​

以下は、動作中の jsFiddle