如何检查AJAX调用已完成

时间:2013-05-15 07:32:01

标签: jquery ajax

我有一个页面,我必须通过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调用逻辑。但在我的上述情况下,我不能使用这些方法。 &安培;我必须设置超过八种这种嵌套控件。

请建议我一个解决方案。

5 个答案:

答案 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");