2011-07-16 16 views
5

मैं कोड में JQuery और get के साथ कुछ अनुरोध कर रहा हूं। ऐसा लगता है कि:सभी AJAX अनुरोधों के बाद अलर्ट कैसे कॉल करें?

$.get('address1', function() { ... }); 
$.get('address2', function() { ... }); 
$.get('address3', function() { ... }); 

// This code should be runned when all 3 requests are finished 
alert('Finished'); 

तो, वहाँ किसी भी अभी भी प्रोसेस अनुरोध है कि क्या वहाँ का पता लगाने और चिह्नित कोड केवल जब सभी 3 अनुरोध पूरा कर लें चलाने के लिए तरीके हैं।

धन्यवाद।

उत्तर

13

आप jQuery 1.5 में पेश किया deferred objects[docs] का उपयोग कर सकते:

$.when(
    $.get('address1', function() { ... }), 
    $.get('address2', function() { ... }), 
    $.get('address3', function() { ... }) 
).then(function() { 
    alert('Finished'); 
}); 

संदर्भ:jQuery.when

jQuery शिक्षा केंद्र एक अच्छा introduction to deferred objects/promises है।

+0

यदि 'get' की कॉलिंग विभाजित कार्यों में है? क्या मैं कुछ ऐसा कर सकता हूं: '$। जब (फ़ंक्शन() {doRequest1(); doRequest2(); doRequest3();})। फिर (function() {...});'? – Ockonal

+1

@ ओकोनल: केवल $ $ .get' द्वारा लौटाए गए वादे ऑब्जेक्ट्स को वापस करें: 'फ़ंक्शन() {वापसी $ .get (...)} '। फिर आप '$ कर सकते हैं। जब (doRequest1(), doRequest2(), doRequest3()) ...'। दस्तावेज़ीकरण और उदाहरणों पर नज़र डालें, स्थगित वस्तुएं सिर को पाने के लिए मुश्किल हो सकती हैं, लेकिन वे काफी शक्तिशाली हैं। –

0
var fin1 = false; 
var fin2 = false; 
var fin3 = false; 

$.ajax({ 
    url: "address1", 
    success: function(){ 
    fin1 = true; 
    fnUpdate(); 
    } 
}); 

$.ajax({ 
    url: "address2", 
    success: function(){ 
    fin2 = true; 
    fnUpdate(); 
    } 
}); 

$.ajax({ 
    url: "address3", 
    success: function(){ 
    fin3 = true; 
    fnUpdate(); 
    } 
}); 

function fnUpdate(){ 
    if(fin1 && fin2 && fin3){ 
    alert('fin'); 
    } 
} 
+0

एक अनुरोध में कोई त्रुटि है तो क्या होगा? फिर तकनीकी रूप से सभी तीन "समाप्त हो गए" हैं, लेकिन कोई चेतावनी नहीं देखी जाती है। – rvighne

+0

बेशक आप त्रुटि कॉलबैक जोड़ सकते हैं और फिर आप इसे संभालने के लिए अपना खुद का व्यवसाय तर्क कर सकते हैं। – ysrb

0
var count = 0; 
$.get('address1', function() { count++; ... }); 
$.get('address2', function() { count++; ... }); 
$.get('address3', function() { count++; ... }); 

var int = setInterval(function() { 
    if (count === 3) { 
     clearInterval(int); 
     alert('done'); 
    } 
}, 10); 
2
var isFinished = []; 

$.get('address1', function() { isFinshed.push["address1"]; allDone(); }); 
$.get('address2', function() { isFinshed.push["address2"]; allDone(); }); 
$.get('address3', function() { isFinshed.push["address3"]; allDone();}); 

var allDone = function(){ 
    if(isFinished.length < 3)return 

    alert('Finished'); 
}; 
संबंधित मुद्दे