在页面加载时,我需要调用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这样做吗?
答案 0 :(得分:5)
使用计数器并检查每次调用是否为该计数器添加1并且每次结束减1到该计数器,如果计数器为0,则表示所有api调用都已完成 简单的例子:
var calls = 0;
function makeCall(url) {
calls++;
$.ajax({
complete: function(resp) {
calls--;
}
});
}
答案 1 :(得分:0)
.ajaxComplete应该工作它会在ajax请求完成时注册一个处理程序。本质上,只要ajax请求完成,就会调用此处理程序。
为什么你认为它不起作用?