質問

jqueryの繰延オブジェクトの使用方法について混乱していますが、見た例は私を助けていません。私がやりたいのは1.)AJAXコールを介してカレンダーオブジェクトを取得する、2。)グローバルオブジェクトの一部(MyOBJ)のカレンダーデータに入力し、次に3) 。これらの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つのバリエーションにすぎません... :)

アップデート: GoldenwbyとBrian Oneilが正しく指摘しているように、LoadCalendardataの終わりにPopulatecalendarに電話をかけることができました。それは間違いなくうまくいくでしょう。投稿していたときにそれを考えていたらいいのにと思います。私の究極の目的は、シーケンスを達成する方法を理解することだったと思います。ただし、この場合、LoadCalendardataがPopulatecalendarに直後に呼び出さずに呼び出されるシナリオは考えられないため、このソリューションは間違いなく理にかなっています。ありがとう。

役に立ちましたか?

解決

あなたは実際に実行しています populateCalendar(a, b, c). 。関数の参照を渡す必要があります。これを試して。

$.when(getCalendar(myDate, 70))
 .then(loadCalendarData)
 .then(function(){
     populateCalendar(a, b, c)
  })
 .fail(alertCalendarError);

他のヒント

延期された方法で呼び出す必要がある唯一の方法は、loadcalendardataであるように思われます。

私はあなたが行っている.ajax Callの成功のコールバックからLoadCalendardataを呼び出します。そして、あなたはLoadCalendardataの終わりにPopulatecalendarに電話することができます(コメントですでに言及されているように)。

それはこのように見えるでしょう...

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",
        success: loadCalendarData
    });
}


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

    populateCalendar(a, b, c); //not called until MYOBJ is setup
}


function populateCalendar (x, y, z) {
    // use data from MYOBJ.cal here
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top