jQuery の Deferred オブジェクトの使用方法について混乱しており、見た例は役に立ちません。私がやりたいことは、1.) ajax 呼び出しを介してカレンダー オブジェクトを取得し、2.) グローバル オブジェクト (MYOBJ) の一部にカレンダー データを入力し、次に 3.) MYOBJ の新しいデータをページ要素に入力することです。 . これら 3 つの関数はロジックを実装しており、これらを順番に呼び出したいと思います。
function getCalendar(refDate, numDays) {
return $.ajax({
type: "POST",
url: "services/Calendar.asmx/GetCalendar",
data: '{ "refDate": "' + refDate + '", "numDays": "' + numDays + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json"
}).promise();
}
function loadCalendarData(response) {
var calData = jQuery.parseJSON(response.d);
MYOBJ.cal.dMin = calData.dMin;
MYOBJ.cal.dMax = calData.dMax;
MYOBJ.cal.dates = calData.dates; // array of date strings
}
function populateCalendar (x, y, z) {
// use data from MYOBJ.cal here
}
ただし、loadCalendarData() が完了するまで populateCalendar() を待機させる方法がわかりません。これ...
$.when(getCalendar(myDate, 70))
.then(loadCalendarData)
.then(populateCalendar(a, b, c))
.fail(alertCalendarError);
...明らかに間違っています。自分が何をしているのか理解できないため、壁に投げつけたバリエーションの 1 つにすぎません... :)
更新: GoldenNewby と Brian ONeil が正しく指摘しているように、loadCalendarData の最後に populateCalendar への呼び出しを貼り付けることができます。それは間違いなくうまくいくでしょう。投稿しながら考えればよかった。私の最終的な目的は、シーケンスを達成する方法を理解することだったと思います。ただし、この場合、loadCalendarData の直後に populateCalendar を呼び出さずに loadCalendarData を呼び出すシナリオは考えられないため、このソリューションは間違いなく理にかなっています。ありがとう。