Plusieurs appels ajax de la matrice et de la poignée de rappel une fois rempli
J'ai utilisé des promesses en jQuery légèrement avant mais j'ai du mal à l'appliquer à ce scénario. Je préfère utiliser le $.lorsque() et $.done() les méthodes pour y parvenir.
De ce que je comprends que j'ai besoin de construire un $.Différée objet qui enregistre les demandes et lorsque ces demandes sont finis - le-feu le rappel. Dans mon code ci-dessous le rappel est tir avant les requêtes ajax et pas après peut-être que j'ai juste besoin de dormir,
Je sais que mon code est incomplet, j'ai eu du mal à l'appliquer avec l'ajout de la boucle for.
http://jsfiddle.net/whiteb0x/MBZEu/
var list = ['obj1', 'obj2', 'obj3', 'obj4', 'obj5'];
var callback = function() {
alert("done");
};
var requests = [];
var ajaxFunction = function(obj, successCallback, errorCallback) {
for(i = 0; i < list.length; i++) {
$.ajax({
url: 'url',
success: function() {
requests.push(this);
}
});
}
};
$.when($.ajax(), ajaxFunction).then(function(results){callback()});
Regarder cette question de recevoir toutes les promesses comme un tableau stackoverflow.com/a/16208148
OriginalL'auteur user1982408 | 2013-01-16
Vous devez vous connecter pour publier un commentaire.
Les arguments pour
$.when
devrait être la valeur de retour de$.ajax
, qui aussi n'a pas besoin d'être appelé séparément, qui n'a pas de sens. Vous voulez quelque chose comme ceci:La raison que
.apply
est nécessaire, c'est parce que$.when
peut prendre plusieurs arguments, mais pas un tableau d'arguments..apply
se développe essentiellement à:Cela suppose également que les demandes puissent être accomplies dans n'importe quel ordre.
http://jsfiddle.net/MBZEu/4/ -- avis que "terminé" est connecté à la console une fois tous les messages de réussite.
comment gérer tous les résultats à la fois?
$.lors de l'.appliquer(undefined, les demandes).done(function(response1, response2, ...){ if(response1[1]=="success"") {// DoSomething avec response1[0]} });
Encore, comment obtenir toutes les réponses dans un tableau? Vous ne pouvez pas attendre de savoir comment de nombreuses réponses vont être là avant de la main.
@MKYung demandé, il pourrait être un problème pour gérer les résultats... parce que, si vous avez juste un élément dans la liste des demandes que vous aurez obtenu un réaccorder résultat de la méthode
done
, mais divisée en trois paramètrejqXHR.done(function( data, textStatus, jqXHR ) { ... });
. Mais avec les multiples demandes que vous avez tous les trois paramètres enveloppé dans des tableaux par exemplejqXHR.done(function( [data, textStatus, jqXHR], [data, textStatus, jqXHR], ... ) { ... });
. Pour le manipuler à l'intérieur de ladone
méthode, vous devez connaître le nombre de demandes, dans ce caslist.length
de décider comment analyser les résultats...OriginalL'auteur Explosion Pills
Je partage un exemple simple qui pourrait vous aider à gérer de multiples demandes et leurs réponses:
OriginalL'auteur jjaappoo