3

ページの読み込み時に API を呼び出す必要があります。すべての AJAX 呼び出しが終了 (完了) したら、UI のロックを解除します。問題は、API を呼び出す回数がわからないことです。1回か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 を使用してそれを解決できますか?

4

2 に答える 2

5

カウンターを使用して、すべての呼び出しがそのカウンターに 1 を追加し、すべての終了がそのカウンターに 1 を差し引いたかどうかを確認します。カウンターが 0 になる場合は、すべての API 呼び出しが終了したことを確認します簡単な例:

var calls = 0;
function makeCall(url) {
   calls++;
   $.ajax({
      complete: function(resp) {
          calls--;
      }
   });
}
于 2012-08-15T15:46:37.330 に答える
0

.ajaxComplete が機能するはずです ajax リクエストが完了したときのハンドラーを登録します。基本的に、このハンドラは ajax リクエストが完了するたびに呼び出されます。

なぜうまくいかないと思うのですか?

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

于 2012-08-15T15:44:32.030 に答える