簡體   English   中英

jQuery Deferred對象,按順序調用函數

[英]jQuery Deferred object, calling functions in sequence

我對如何使用jQuery的Deferred對象感到困惑,而我所看到的示例並沒有幫助我。 我想做的是1.)通過ajax調用獲取日歷對象,2.)用日歷數據填充我的全局對象(MYOBJ)的一部分,然后3.)用MYOBJ中的新數據填充頁面元素。 這三個函數實現了邏輯,我想依次調用它們:

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
}

我無法弄清楚如何使populateCalendar()等到loadCalendarData()完成之后。 這個...

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

...顯然是不正確的-這只是我扔在牆上的一種變化,因為我不明白自己在做什么... :)

更新:正如GoldenNewby和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調用的成功回調中調用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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM