如何知道所有AJAX调用何时完成?

时间:2012-08-15 15:40:28

标签: jquery

在页面加载时,我需要调用API。当所有AJAX调用完成(完成)后,我想解锁UI。问题是我不知道有多少次我会调用API。它可能是一次或10次。

我的代码:

$(document).ready(function () {

           callAPI(yourApiKey);
});

和功能:

function getRates(yourAPIKey, contractCode, startDate, endDate) {
// I did cut some code here
 $.ajax({   
     url: ratesEnquiry,
     type: 'GET',
     dataType: "jsonp",
     jsonp: "callback",
     complete: function (response, responseCode) {       
     },
     success: function (json) {
     $.each(json, function (index, value) {
             populateValues("rate", this.ContractCode, this.RoomTypeCode, this.Date.substr(0, 10), this.RoomPrice);
             populateValues("hrate", this.ContractCode, this.RoomTypeCode, this.Date.substr(0, 10), this.RoomPrice);

             });
         }
     });
 }



function getAvailability(yourAPIKey, contractCode, startDate, endDate) {
    // I've cut off some code here as well
    $.ajax({
    url: availabilityEnquiry,
    type: 'GET',
    dataType: "jsonp",
    jsonp: "callback",
    //jsonpCallback: "jsonpCallback",
    complete: function (json, responseCode) {
        //console.log(response); console.log(responseCode);
        //alert("complete");           
    },
    success: function (json) {

        $.each(json, function (index, value) {
             populateValues("avail", this.ContractCode, this.RoomTypeCode, this.Date.substr(0, 10), this.Quantity);
             populateValues("havail", this.ContractCode, this.RoomTypeCode, this.Date.substr(0, 10), this.Quantity);                      
            // alert(this.RoomPrice);
            });

        }
    });
}


function callAPI(yourAPIKey) {

     // I've cut off some code here

     $.blockUI({ message: '<span class="loader green" original-title="1Loading, please wait…"></span><h3> Please wait...</h3>' });
     $.ajax({
         url: enquiry,
         type: 'GET',
         dataType: "jsonp",
         jsonp: "callback",
         complete: function (response, responseCode) {
         },
         success: function (json) {
             $.each(json.Contracts, function (index, contract) {
                ContractsArray[Count] = contract.ContractCode;
                Count++;

             });
             for(var i = 0; i < Count; i++){

                 getAvailability(yourAPIKey, ContractsArray[i], startDate, endDate);
                 getRates(yourAPIKey, ContractsArray[i], startDate, endDate);

             }
         }
     });
    }

我可以使用ajaxStop或者ajaxComplete这样做吗?

2 个答案:

答案 0 :(得分:5)

使用计数器并检查每次调用是否为该计数器添加1并且每次结束减1到该计数器,如果计数器为0,则表示所有api调用都已完成 简单的例子:

var calls = 0;
function makeCall(url) {
   calls++;
   $.ajax({
      complete: function(resp) {
          calls--;
      }
   });
}

答案 1 :(得分:0)

.ajaxComplete应该工作它会在ajax请求完成时注册一个处理程序。本质上,只要ajax请求完成,就会调用此处理程序。

为什么你认为它不起作用?

http://api.jquery.com/ajaxComplete/