J’ai 3 appels ajax pour une fonctionnalité particulière. Le 3ème appel dépend des 2 premiers appels, c’est-à-dire que pour le 3ème appel, les 2 premiers appels doivent être terminés. Mais les 2 premiers appels AJAX sont indépendants. Je veux donc qu’ils soient asynchrones et s’exécutent en parallèle.
Comment structurer ces appels maintenant? J’ai essayé de les mettre dans un bloc de succès nested d’appels respectifs, mais les deux premiers appels ne sont pas indépendants.
Veuillez suggérer avec un code sudo, si possible.
Utilisez les promesses et $.when
:
$.when(ajaxCall1(), ajaxCall2()).then(ajaxCall3);
où ajaxCallX
est quelque chose comme
function ajaxCall1() { return $.ajax(...); }
Cela signifie essentiellement “après que les deux promesses d’ ajaxCall1
et d’ ajaxCall2
soient résolues, exécutez la fonction ajaxCall3
“.
Cela fonctionne car l’object renvoyé par $.ajax
(et des méthodes similaires) implémente l’interface de promesse. Plus d’informations peuvent également être trouvées dans la documentation $.ajax
.
Les réponses de chaque appel Ajax sont transmises au rappel then
sous forme d’arguments. Vous pouvez les accéder comme
$.when(ajaxCall1(), ajaxCall2()).then(function(a1, a2) { // a1[0] is the response of the first call // a2[0] is the response of the second call ajaxCall3(a1[0], a2[0]); });
Regardez la documentation $.when
pour un autre exemple.
Vous pouvez utiliser ajaxComplete pour appeler le troisième événement une fois l’exécution des deux premiers événements terminée. ajaxComplete est un événement de rappel qui est déclenché après chaque réponse ajaxCalls. Regardez ce lien pour voir comment ça marche https://api.jquery.com/ajaxComplete/