在页面加载时我需要调用 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 来解决这个问题吗?
最佳答案
使用计数器并检查是否每次调用都会向该计数器加 1,每次完成时该计数器是否会减 1,如果计数器为 0,则您知道所有 api 调用都已完成 简单的例子:
var calls = 0;
function makeCall(url) {
calls++;
$.ajax({
complete: function(resp) {
calls--;
}
});
}
关于jquery - 如何知道所有 AJAX 调用何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972489/