在单个方法中调用多个函数时出现问题

时间:2017-06-18 06:39:13

标签: javascript

我正在尝试绑定下拉列表并按ID选择用户。所以我有两种方法,如(获取用户)和(选择用户),当我调用选择用户方法时,它正在调用但不选择任何下拉值。

function getUsers() {
try {

    objReqUser.PageIndex = 1;
    objReqUser.PageSize = 2000;
    objReqUser.TotalPageCount = 0;
    objReqUser.User.OpType = 2;

    $.ajax({
        type: 'POST',
        url: APIUrl + 'api/GetUsers?JSONStringData=' + JSON.stringify(objReqUser),
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        crossDomain: true,
        success: function (data, textStatus, xhr) {

            objResUser = data;

            if (objResUser != null && parseInt(objResUser.ID) > 0) {
                var ddl = $("[id*=ddlDeliveryBoy]");
                ddl.empty().append('<option selected="selected" value="0">Select Delivery Boy</option>');
                $.each(objResUser.User, function () {
                    ddl.append($("<option></option>").val(this.ID).html(this.UniqueName));
                });
            }
            else {

                if (objResUser != null)
                    messageProvider(objResUser.ID, objResUser.Msg);
                else
                    messageProvider(0, "There is an error !");
            }

        },
        error: function (xhr, textStatus, errorThrown) {

            messageProvider(0, errorThrown);
        }
    });
}
catch (err) {
    messageProvider(0, err.message);
}

}

并选择用户方法

function selectUser(ID) {

try {
    getUsers()

    $('#ddlDeliveryBoy').val(1);

}
catch (err) {
    messageProvider(0, err.message);
}
};

1 个答案:

答案 0 :(得分:1)

所以,当你执行$ .ajax时会发生什么,它会返回一个异步的回调。在您的方法中,您编写了两个同步语句

statement1 -> sync statement2 -> sync

通常他们会同步运行,但是因为你使用了$ .ajax

statement1 ->async statement2 -> sync

所以,要处理statement1的异步行为并满足在statement1完成它的$ .ajax之后调用statement2的要求。我们通过回调。

要详细了解回调:What is a callback function?

第一种方法内部有一个回调,你的seconds语句是同步的。将代码更改为:

function callback() {
 $('#ddlDeliveryBoy').val(1);
}

getUsers(callback);

function getUsers(callback) {
try {

    objReqUser.PageIndex = 1;
    objReqUser.PageSize = 2000;
    objReqUser.TotalPageCount = 0;
    objReqUser.User.OpType = 2;

    $.ajax({
        type: 'POST',
        url: APIUrl + 'api/GetUsers?JSONStringData=' + JSON.stringify(objReqUser),
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        crossDomain: true,
        success: function (data, textStatus, xhr) {

            objResUser = data;

            if (objResUser != null && parseInt(objResUser.ID) > 0) {
                var ddl = $("[id*=ddlDeliveryBoy]");
                ddl.empty().append('<option selected="selected" value="0">Select Delivery Boy</option>');
                $.each(objResUser.User, function () {
                    ddl.append($("<option></option>").val(this.ID).html(this.UniqueName));
                });
            }
            else {

                if (objResUser != null)
                    messageProvider(objResUser.ID, objResUser.Msg);
                else
                    messageProvider(0, "There is an error !");
            }

            callback();

        },
        error: function (xhr, textStatus, errorThrown) {

            messageProvider(0, errorThrown);
        }
    });
}
catch (err) {
    messageProvider(0, err.message);
}