Đây là một đối tượng gọi lại mà tôi đã viết trong đó bạn có thể đặt một cuộc gọi lại duy nhất để kích hoạt một khi tất cả hoàn thành hoặc để mỗi người có cuộc gọi lại của riêng họ và kích hoạt tất cả khi tất cả hoàn thành:
ĐỂ Ý
Vì jQuery 1.5+, bạn có thể sử dụng phương thức hoãn lại như được mô tả trong câu trả lời khác:
$.when($.ajax(), [...]).then(function(results){},[...]);
Ví dụ về hoãn lại ở đây
đối với jQuery <1.5, các thao tác sau sẽ hoạt động hoặc nếu bạn cần thực hiện các cuộc gọi ajax của mình vào những thời điểm không xác định như được hiển thị ở đây với hai nút: được kích hoạt sau khi cả hai nút được nhấp
[sử dụng]
cho một cuộc gọi lại sau khi hoàn thành: Ví dụ làm việc
// initialize here
var requestCallback = new MyRequestsCompleted({
numRequest: 3,
singleCallback: function(){
alert( "I'm the callback");
}
});
//usage in request
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.requestComplete(true);
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.requestComplete(true);
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.requestComplete(true);
}
});
mỗi người có cuộc gọi lại riêng khi tất cả hoàn thành: Ví dụ làm việc
//initialize
var requestCallback = new MyRequestsCompleted({
numRequest: 3
});
//usage in request
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.addCallbackToQueue(true, function() {
alert('Im the first callback');
});
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.addCallbackToQueue(true, function() {
alert('Im the second callback');
});
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.addCallbackToQueue(true, function() {
alert('Im the third callback');
});
}
});
[Mật mã]
var MyRequestsCompleted = (function() {
var numRequestToComplete, requestsCompleted, callBacks, singleCallBack;
return function(options) {
if (!options) options = {};
numRequestToComplete = options.numRequest || 0;
requestsCompleted = options.requestsCompleted || 0;
callBacks = [];
var fireCallbacks = function() {
alert("we're all complete");
for (var i = 0; i < callBacks.length; i++) callBacks[i]();
};
if (options.singleCallback) callBacks.push(options.singleCallback);
this.addCallbackToQueue = function(isComplete, callback) {
if (isComplete) requestsCompleted++;
if (callback) callBacks.push(callback);
if (requestsCompleted == numRequestToComplete) fireCallbacks();
};
this.requestComplete = function(isComplete) {
if (isComplete) requestsCompleted++;
if (requestsCompleted == numRequestToComplete) fireCallbacks();
};
this.setCallback = function(callback) {
callBacks.push(callBack);
};
};
})();