如何在ajax之后执行特定代码

时间:2018-01-15 03:21:15

标签: javascript jquery ajax

我有一个函数,其中使用ajax填充我的数据库中的选项的select元素,这是函数的代码。

function Filtering_GetRole(roleElement) {

$.ajax({

    type: "POST",
    url: "IROA_StoredProcedures.asmx/Filtering_GetRole",
    data: "",
    contentType: "application/json; charset=utf-8",
    dataType: "json",

    success: function (response) {

        var roletooldetails = response.d;
        var appendItem = "";

        $(roleElement).empty();

        $.each(roletooldetails, function (index, Filtering_GetRoleInfo) {

            var activeappend = "";
            var id = Filtering_GetRoleInfo.id;
            var role = Filtering_GetRoleInfo.Role;

            activeappend = "<option value=" + id + ">" + role + "</option>";


            appendItem += activeappend;

        });

        $(roleElement).prepend('<option disabled="disabled" selected="selected" value="">Select Tool</option>')
        $(roleElement).append(appendItem);

    },

    error: function (XMLHttpRequest) {
        console.log(XMLHttpRequest);
        alert("error in Filtering_GetTool");
    }

});
}

我称之为

var slcRole = $(this).closest(".td-span-buttons").closest(".tr-span-buttons").find(".slc-role"); var holdRoleId = slcRole.val();

        Filtering_GetRole(slcRole);

        slcRole.val(holdRoleId);

但问题是因为我使用ajax,代码slcRole.val(holdRoleId);将首先执行,导致选项元素上未选择的值。如果ajax代码完成此代码将执行,我该怎么做呢。抱歉英文不好

4 个答案:

答案 0 :(得分:1)

只需将slcRole.val(holdRoleId);加入success

否则,js将在不等待ajax完成的情况下执行。

答案 1 :(得分:1)

我认为您需要在successerror之后执行此操作,因此请在任何回调中或在Filtering_GetRole将其放入ajax的完整回调后查看{{3 }}。当ajax完成时,它将在完整块内执行代码。希望这会有所帮助。

答案 2 :(得分:1)

确保处理ajax请求的另一种方法是使用jQuery.when(),但最好的方法是将slcRole.val(holdRoleId)置于成功回调中。

答案 3 :(得分:1)

您可以使用complete功能。 complete仅在ajax“成功”之后执行。以下代码对您有所帮助。

success: function (response) {
     // Your code
},
complete: function (response) {
   slcRole.val(holdRoleId);
},
error: function (XMLHttpRequest) {
    // Your code
}