我有一个页面,我必须通过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调用的完成
$( “#国”)VAL(_公司);
但是因为ajax异步调用仍在进行中&国家下拉将是绑定&完成ajax调用后渲染。
因此,国家的初始值和国家的下降都没有结合。 所以,我的问题是:有没有办法检查或等待完成AJAX异步调用,这样我就会在那之后检查渲染控件的存在($(“#state”)。length> 0) /完成ajax电话。
我知道有.done,.fail& .always方法的jquery ajax我可以处理ajax调用逻辑。但在我的上述情况下,我不能使用这些方法。 &安培;我必须设置超过八种这种嵌套控件。
请建议我一个解决方案。
答案 0 :(得分:1)
您可以使用.done()
$.ajax({
url: "url",
context: document.body
}).done(function() {
//Write your code here
});
答案 1 :(得分:0)
您可以使用 .done 或 .success 等方法,例如
$.ajax({
url : my_url,
data : data,
}).done(function() {
alert('Ajax completed');
});
使用成功
$.ajax({
url : my_url,
data : data,
success : function(){
alert('Successfully completed ajax');
}
});
答案 2 :(得分:0)
你也可以像这样检查
$.ajax({
url: "url",
statusCode: {
200: function() {
alert("Ajax call successfully completed");
}
});
答案 3 :(得分:0)
你可以这样检查:
$.ajax({
type: "POST",
dataType: 'json',
url: url,
contentType: "application/x-www-form-urlencoded",
data: request,
xhrFields: {
withCredentials: true
},
success: function(data){
//it will be called if everything its ok
},
error: function (data) {
//it will be called if there is something bad in your server
}
});
其中“data”包含您对方法和参数的请求。
我希望这可以帮到你。
Juanitos
答案 4 :(得分:0)
<script>
function FillState() {
var countryId = $('#CountryId').val();
$.ajax({
url: '/Student/FillState',
type: "GET",
dataType: "JSON",
data: { countryId: countryId },
success: function (states) {
$("#StateId").html(""); // clear before appending new list
$.each(states, function (i, state) {
$("#StateId").append(
$('<option></option>').val(state.Id).html(state.Name));
});
}
});
}
</script>
public ActionResult FillState(int countryId = 0)
{
db.Configuration.ProxyCreationEnabled = false;
var states = db.States.Where(x => x.CountryId == countryId).ToList();
return Json(states, JsonRequestBehavior.AllowGet);
}
ViewBag.StateId = new SelectList(db.States.Where(x => x.CountryId == studentDetail.CountryId), "Id", "Name", studentDetail.StateId);
ViewBag.StateId = new SelectList(db.States.Where(x => x.CountryId == 0), "Id", "Name");