具有多个ajax调用的jQuery回调

时间:2018-11-22 18:21:51

标签: jquery ajax callback

我有几个函数可以根据ajax调用中的列表填充下拉列表:

function getMissions(defaultId) {
    $.getJSON("Defaults/GetMissions", function (result) {
        var dropDownToFill = $('#change-mission');
        fillUpdateDropDown(dropDownToFill, result);
    });
}
function getSectors(defaultId) {
    $.getJSON("Defaults/GetSectors", function (result) {
        var dropDownToFill = $('#change-sector');
        fillUpdateDropDown(dropDownToFill, result);
    });
}

现在,在填充下拉列表之后,我想选择一个特定的项目,但是要获得此项目,我需要另一个像这样的ajax:

function getDefaultDetails(defaultId) {
   $.ajax({
        type: "GET",
        url: "/Defaults/GetDefault",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: { defaultId: defaultId },
        success: function (response) {
            //code here to select the items from the response
        },
    });
}

主要功能基本上是:

function main(defaultId){
    getMissions(defaultId);
    getSectors(defaultId);
    getDefaultDetails(defaultId);
}

问题在于success完成之前已经到达getDefaultDetails的{​​{1}}回调(下拉列表可能包含很多项)。

我正在尝试了解回调,但就我而言,我无法解决我的问题。我已经尝试过类似的东西:

fillUpdateDropDown

但没有成功。

如何执行?

谢谢。

1 个答案:

答案 0 :(得分:1)

$.when()期望thenable对象(Promise,Deferred,Thenable)类似于$.getJSON()的返回值。

您还必须在一个匿名函数中将对getDefaultDetails()的调用包装在.done()中,否则,您将执行该函数,并且仅将其返回值(undefined)用于{{ 1}}

.done()