我正在尝试绑定下拉列表并按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);
}
};
答案 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);
}