3 回答
TA贡献1794条经验 获得超8个赞
类似于 John M 的回答,但用法不同。
返回$.ajax承诺并使用.done()
if (servicename!="")
return $.ajax({...
// else return null
$('#btnTest').click(function () {
var ajax = RetrieveDD($("#ddlCountries"), "country", 0);
if (ajax) {
ajax.done(function(data) {
console.log('done');
});
}
});
TA贡献1780条经验 获得超3个赞
JQuery.ajax() 实现了 Promise 接口,因此您可以获取 ajax 调用返回的 Promise 对象并将其传递回您的调用函数。那可以在ajax调用完成后使用Promise.then()来调用代码,我认为这比使用回调更简洁。
function RetrieveDD(ddl, ddtype, id) {
var servicename;
var promise;
switch (ddtype) {
case 'country':
servicename = "LoadCountries";
break;
case 'state':
servicename = "LoadStateProvinces";
break;
case 'city':
servicename = "LoadCityLocalities";
break;
default:
servicename = "";
}
if (servicename != "") {
promise = $.ajax({
url: 'DDService.asmx/' + servicename,
dataType: 'json',
method: 'post',
data: { ID: id },
success: function (data) {
ddl.empty();
$.each(data, function (index) {
ddl.append($("<option" + (index == 0 ? " selected" : "") + "></option>").val(this['V']).html(this['T']));
console.log('update list');
});
},
error: function (err) {
console.log('Error (RetrieveDD): ' + JSON.stringify(err, null, 2));
}
});
};
return promise;
};
$('#btnTest').click(function () {
var promise = RetrieveDD($("#ddlCountries"), "country", 0);
if (promise) {
promise.then(function(value) {
var cid = $("#ddlCountries").val();
console.log('done');
});
}
});
TA贡献1820条经验 获得超2个赞
在您的函数中使用回调:
function RetrieveDD(ddl, ddtype, id, callback = false) {
// ...
if (servicename != "") {
$.ajax({
url: 'DDService.asmx/' + servicename,
dataType: 'json',
method: 'post',
data: { ID: id },
success: function (data) {
// ...
if(typeof callback === 'function'){
callback(data);
}
},
error: function (err) {
// ...
if(typeof callback === 'function'){
callback(err);
}
}
});
};
};
RetrieveDD($("#ddlCountries"), "country", 0, (data_or_error)=>{
var cid = $("#ddlCountries").val();
});
添加回答
举报