JQuery: Подождите, пока несколько запросов GET будут успешно обработаны
Мне нужно выдать несколько запросов $.get, обработать их ответы и записать результаты обработки в том же массиве. Код выглядит следующим образом:
$.get("http://mysite1", function(response){
results[x1] = y1;
}
$.get("http://mysite2", function(response){
results[x2] = y2;
}
// rest of the code, e.g., print results
В любом случае, чтобы все функции успеха были завершены, прежде чем перейти к остальной части моего кода?
Ответы
Ответ 1
Существует очень элегантное решение: объект jQuery Deferred. $.get возвращает объект jqXHR, который реализует интерфейс Deferred - эти объекты могут быть объединены следующим образом:
var d1 = $.get(...);
var d2 = $.get(...);
$.when(d1, d2).done(function() {
// ...do stuff...
});
Подробнее на http://api.jquery.com/category/deferred-object/ и http://api.jquery.com/jQuery.when/
Ответ 2
$.when
позволяет объединить несколько Deferred
(что возвращает $.ajax
).
$.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.
});