Mam problem z używaniem jQuery.when() do oczekiwania na zakończenie wielu żądań ajaxowych przed wywołaniem innej funkcji.jQuery. Przy rozwiązywaniu problemów ze zmienną liczbą argumentów
Każde żądanie ajax dostanie danych JSON, i wygląda mniej więcej tak:
function loadData(arg){
var ajaxCall = $.ajax(
URL // depends on arg
)
.error(....);
return ajaxCall;
}
Jeżeli wniosek jest nazywany, wartość zwracana (ajaxCall) dodaje się do listy o nazwie ajaxRequests.
ajaxRequests = [];
ajaxREquests.push(loadData(arg))
Gdy wszystkie wnioski zostały dokonane, próbuję przekazać ajaxRequests do $ .Przy aby czekać na wszystkich żądań, aby zakończyć.
var defer = $.when.apply($, ajaxRequests);
defer.done(function(args){
for (var i=0; i<args.length; i++){
inst.loadData($.parseJSON(args[i].responseText));
}
inst.draw();
});
inst jest obiektem, który ładuje i rysuje wykresy na podstawie danych JSON.
Problem polega na tym, że wygląda na to, że nie oczekuje on na zakończenie żądań - args [i] jest obiektem, ale responseText jest niezdefiniowany, gdy kod zostanie uruchomiony. Jeśli zapiszę argumenty [i] i uzyskam do nich dostęp później z konsoli, to działa.
Podejrzewam, że problem jest związany z używaniem .w przypadku dowolnej liczby argumentów, ponieważ wszystkie przykłady, które widziałem w sieci, zawierają predefiniowaną listę argumentów.
Nie jestem pewien, czy użycie polecenia było właściwe, czy nie, ale tak czy inaczej nie działa poprawnie i zachowuje się nieregularnie (zależnie od przeglądarki).
Każda pomoc zostanie bardzo doceniona.
Proszę dać mi znać, jeśli potrzebujesz więcej informacji.
Używam jQuery 1.5
Może to tylko ja, ale składnia masz w kodzie nie wydaje się zgodny z API jQuery (http: //api.jquery. com/jQuery.when /). Być może chcesz wypróbować tę składnię i zobaczyć, czy to działa? – fayerth
Uważam, że jego punktem było to, że nie używa go tak, jak pokazano w dokumentach, ponieważ ma on zmienną liczbę argumentów. –
@ grennis Dokładnie. – Alex