นี่คือวัตถุเรียกกลับที่ฉันเขียนไว้ซึ่งคุณสามารถตั้งค่าการโทรกลับครั้งเดียวให้เริ่มทำงานเมื่อเสร็จสิ้นทั้งหมดหรือปล่อยให้แต่ละครั้งมีการโทรกลับของตัวเองและเริ่มการทำงานทั้งหมดเมื่อเสร็จสมบูรณ์:
ประกาศ
เนื่องจาก jQuery 1.5+ คุณสามารถใช้วิธีการรอการตัดบัญชีตามที่อธิบายไว้ในคำตอบอื่น:
$.when($.ajax(), [...]).then(function(results){},[...]);
ตัวอย่างการรอตัดบัญชีที่นี่
สำหรับ jQuery <1.5 สิ่งต่อไปนี้จะใช้งานได้หรือหากคุณต้องการให้การโทร ajax ของคุณเริ่มทำงานในเวลาที่ไม่รู้จักดังที่แสดงไว้ที่นี่ด้วยปุ่มสองปุ่ม: เริ่มทำงานหลังจากคลิกทั้งสองปุ่ม
[การใช้งาน]
สำหรับเดียวโทรกลับเมื่อเสร็จ: ตัวอย่างการทำงาน
var requestCallback = new MyRequestsCompleted({
numRequest: 3,
singleCallback: function(){
alert( "I'm the callback");
}
});
$.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);
}
});
แต่ละคนมีการโทรกลับของตนเองเมื่อทุกอย่างเสร็จสมบูรณ์: ตัวอย่างการทำงาน
var requestCallback = new MyRequestsCompleted({
numRequest: 3
});
$.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');
});
}
});
[รหัส]
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
}
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)
}
}
})()