0
votes

Comment une garantie qu'un appel Ajax est terminée avant d'en appeler un autre?

Je travaille sur une application de la fiole et il y a cette fonction JavaScript associée à un formulaire xxx

la fonction addcatalogfilters () est également un appel AJAX. Ces deux appels changent de variables du côté python des choses. Ce que je veux savoir, c'est si le premier appel AJAX (à addCatalogfilters) est garanti d'exécuter et de revenir avant le second. Je finis par des résultats étranges qui semblent être des conditions de course basées sur la commande des appels AJAX exécutés. Est-ce possible avec le code structuré comme celui-ci? Également, si oui, comment puis-je le réparer? xxx


7 commentaires

Passer un rappel sur addCatalogfilters ? Il n'est pas garanti de finir en premier sinon.


Ou a-t-il renvoyer la promesse, puis la consommez


$ .ajax renvoie un objet de promesse que vous pouvez .Chen et attendez-vous sur


En guise de tête, si vous êtes capable d'obtenir des appels de plusieurs utilisateurs (ou même le même utilisateur dans plusieurs navigateurs / onglets), cela peut entraîner les mêmes résultats étranges. Vous voudrez peut-être aussi regarder dans des options de synchronisation côté serveur ... Ils ont l'air assez simple, bien que je ne suis pas d'expert Python: docs.python.org/3.4/library/asyncio-sync.html


@Richard Williams veuillez poster une fonction addcatalogfilters afin que nous puissions mieux vous aider. Afin de s'assurer que les appels AJAX se produisent dans le bon ordre, un crochet est requis sur le (s) appel (s) AJAX à l'intérieur de AddCatalogfilters.


@ user120242 J'ai ajouté la fonction addcatalogfilters


@Richardwilliams Il y a des erreurs dans votre code que je n'ai pas correctement réparateur. Il ne montre que comment vous devriez utiliser l'attente pour vous assurer que l'appel AJAX est terminé avant que l'exécution continue. Par exemple, vous avez un support de fermeture manquant.


4 Réponses :



0
votes

Vous pouvez vous assurer que la fonction de réussite d'AJAX. Appelez d'abord un AJAX (disons ajax1) appelez un autre appel AJAX dans la fonction de réussite de la première Call Ajax (fonction de réussite AJAX1). XXX

Ce n'est peut-être pas le moyen optimal. Mais garantir un appel Ajax est terminé avant d'appeler un autre.


0 commentaires

0
votes

En fonction de la manière dont l'application s'applique, vous devrez peut-être avoir un attendre ou ..quez-le où vous l'appelez. Notez que vous pouvez également utiliser "Résultat = Await AddCatalogfilters (CurrentCatalog)" pour mettre le résultat AJAX à un résultat variable que vous pouvez utiliser et passer à votre appel de votre $ .AJAX Appel dans ApplyBeeries. Je ne connais pas la nature de votre code, je ne peux donc pas faire de suggestions directes. XXX PRE>


// Add user catalog filters
function addCatalogFilters() {
    catalog = currentCatalog;
    formData = new FormData(document.getElementById('catalogFilterForm'));
    // return the Promise-like jqXHR object: https://api.jquery.com/jQuery.ajax/#jqXHR
    return $.ajax({
        type: 'POST',
        url:  "/addCatalogFilters",
        data: formData,
        processData: false,
        contentType: false,
        success: function (response){
            document.getElementById(catalog + 'close').style.display = 'block';
            document.getElementById(catalog + 'check').style.display = 'none';
            addBtns = document.getElementsByClassName("addBtn");
            removeBtns = document.getElementsByClassName("removeBtn");
            for (i = 0; i < addBtns.length; i++) {
                addBtns[i].style.display = "none";
                removeBtns[i].style.display = "inline-block";
            }
        }
    })
};


0 commentaires

0
votes

Vous pouvez utiliser async / attendre . Cependant, comme personne n'a mentionné, je voudrais démontrer comment vous pouvez y accomplir avec prometteur .

permet de définir deux fonctions: xxx

Maintenant, vous pouvez vous assurer que second_function () est appelé qu'après l'exécution de ajax demande dans first_function () par approche suivante: xxx


0 commentaires