यहाँ एक कॉलबैक ऑब्जेक्ट है, जिसमें मैंने लिखा है कि आप या तो एक कॉलबैक को आग लगा सकते हैं, एक बार पूरा हो जाने के बाद या प्रत्येक को अपना कॉलबैक होने दें और सभी को एक बार पूरा करने के लिए आग दें:
नोटिस
JQuery 1.5+ के बाद से आप आस्थगित विधि का उपयोग कर सकते हैं जैसा कि दूसरे उत्तर में वर्णित है:
$.when($.ajax(), [...]).then(function(results){},[...]);
यहां आस्थगित का उदाहरण
jQuery के लिए <1.5 निम्नलिखित काम करेगा या अगर आपको अपने ajax कॉल को अज्ञात समय पर करने की आवश्यकता है जैसा कि यहां दो बटन के साथ दिखाया गया है: दोनों बटन क्लिक किए जाने के बाद निकाल दिए गए
[उपयोग]
एकल कॉलबैक के लिए एक बार पूरा: कार्य उदाहरण
// 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);
}
});
प्रत्येक के लिए अपने स्वयं के कॉलबैक जब सब पूरा: कार्य उदाहरण
//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');
});
}
});
[कोड]
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);
};
};
})();