【发布时间】:2013-05-15 07:32:00
【问题描述】:
我有一个页面,我必须通过 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 调用逻辑。但在上述情况下,我不能使用这些方法。 & 我必须设置超过 8 个这种类型的嵌套控件。
请给我一个解决方案。
【问题讨论】:
-
也许在最后添加一个警报?