我有一个页面,我必须通过 ajax 调用绑定几个控件。国家下拉,州根据所选国家下拉,城市下拉根据所选城市。嵌套数据绑定工作正常。
但是如果我有一些国家、州、城市的初始值,我必须设置选定的值,那么这不起作用。我正在调用一个函数来设置初始值,如下所示:
function bindandsetvalues(_country, _state, _city){
// function to bind countries via ajax call. ajax logic is inside this function
bindcountries();
if($("#country").length > 0){
// set selected country
$("#country").val(_country);
// function to bind states via ajax call. ajax logic is inside this function
bindstates(_country);
if($("#state").length > 0){
// set selected state
$("#state").val(_state);
}
}
}
但只有国家下拉列表被填充。国家集的初始值和状态下拉列表都不绑定。
我也找到了原因。调用 bindcountries() 函数后,控制转到 bindcountries() 函数。但是在 bindcountries() 函数内部有一个异步 ajax 调用,所以在调用 ajax 调用后,控制权返回到调用者函数,而无需等待我调用的 ajax 调用完成
$("#country").val(_country);
但是因为 ajax 异步调用仍在进行中,并且国家下拉列表将在完成 ajax 调用后绑定和呈现。
因此,国家集的初始值和状态下拉列表都不绑定。所以,我的问题是:有什么方法可以检查或等待 AJAX 异步调用的完成,以便在那之后检查渲染控件的存在 ($("#state").length > 0)/完成ajax调用。
我知道 jquery ajax 有 .done、.fail 和 .always 方法,我可以在其中处理后 ajax 调用逻辑。但在上述情况下,我不能使用这些方法。& 我必须设置超过八个这种类型的嵌套控件。
请建议我一个解决方案。