jQueryのDeferredオブジェクトの使い方が混乱しています。私がしたいのは、1)ajax呼び出しでカレンダー・オブジェクトを取得する、2)カレンダー・データをグローバル・オブジェクト(MYOBJ)の一部に取り込み、3)MYOBJの新しいデータでページ・エレメントを取り込む。これらの3つの関数がロジックを実装し、私は順番に呼び出したい:jQuery遅延オブジェクト、シーケンス内の関数の呼び出し
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);
...明らかに間違っている - 私は私がやっているのか理解していないので、それは私が壁に投げてきただけで一つのバリエーションだ... :)
UPDATE: GoldenNewbyとBrian ONeilが正確に指摘しているように、私はloadCalendarDataの最後にpopulateCalendarを呼び出すことができます。それは間違いなく機能します。私が投稿していたとき、私はそれを考えていたと思う。私は私の究極の目的は、シーケンシングを達成する方法を理解することでした。しかし、この場合、loadCalendarDataはpopulateCalendarの直後に呼び出さずに呼び出されるため、このソリューションは間違いなく理にかなっています。ありがとう。
loadCalendarDataの最後の行としてpopulateCalendarを呼び出すことはできますか? – GoldenNewby
それは間違いなく動作します、ありがとうございます。申し訳ありませんが、私はこれらの機能を可能な限り互いに独立させようとしていることを忘れていました。私が与えた例はページの読み込みに由来していますが、後にどちらの関数も呼び出すことができると考えられます。主に私は遅れを取り巻いて頭を包み込みたいと思っています。これは私のやり方を理解できなかった例です。 –