我有一个函数,其中使用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代码完成此代码将执行,我该怎么做呢。抱歉英文不好
答案 0 :(得分:1)
只需将slcRole.val(holdRoleId);
加入success
。
否则,js将在不等待ajax完成的情况下执行。
答案 1 :(得分:1)
我认为您需要在success
或error
之后执行此操作,因此请在任何回调中或在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
}