2012-03-27 13 views
17

Muszę wysłać wiele żądań $ .get, przetworzyć ich odpowiedzi i zapisać wyniki przetwarzania w tej samej tablicy. Kod wygląda następująco:jQuery: Poczekaj, aż wiele żądań GET zostanie pomyślnie przetworzonych.

$.get("http://mysite1", function(response){ 
    results[x1] = y1; 
} 
$.get("http://mysite2", function(response){ 
    results[x2] = y2; 
} 

// rest of the code, e.g., print results 

Czy mimo to, aby zapewnić, że wszystkie funkcje sukcesu zakończyły, zanim przystąpię do reszty mojego kodu?

Odpowiedz

34

Istnieje bardzo eleganckie rozwiązanie: obiekt odroczony jQuery. $ .get zwraca obiekt jqXHR która implementuje interfejs odroczony - obiekty te mogą być połączone tak:

var d1 = $.get(...); 
var d2 = $.get(...); 

$.when(d1, d2).done(function() { 
    // ...do stuff... 
}); 

Czytaj więcej na http://api.jquery.com/category/deferred-object/ i http://api.jquery.com/jQuery.when/

+0

Czy to rozwiązanie nadal działa, jeśli mam funkcje sukces w ramach połączeń $ .get? Próbowałem już wcześniej, bez powodzenia! – amir

+0

Tak, to powinno być możliwe. – Niko

10

$.when pozwala łączyć wiele Deferred s (co jest co $.ajax zwraca).

$.when($.get(1), $.get(2)).done(function(results1, results2) { 
    // results1 and results2 will be an array of arguments that would have been 
    // passed to the normal $.get callback 
}).fail(function() { 
    // will be called if one (or both) requests fail. If a request does fail, 
    // the `done` callback will *not* be called even if one request succeeds. 
}); 
Powiązane problemy