Question

Existe-t-il un moyen d’écouter la sortie d’une fonction javascript? Un déclencheur qui pourrait être configuré à la fin d’une fonction?

J'essaie d'utiliser une technique de dissimulation d'interface utilisateur (BlockUI) lorsqu'un objet AJAX récupère des données à partir de la base de données, mais la fonction ne s'exécute pas nécessairement en dernier, même si vous le placez à la fin de l'appel de la fonction.

Exemple:

function doStuff() {
  blockUI();
  ajaxCall();
  unblockUI();
};

Existe-t-il un moyen pour doStuff d'écouter ajaxCall se terminer avant de lancer l'unBlockUI? Dans l’état actuel, la fonction est traitée linéairement, en appelant chaque objet dans l’ordre, puis un thread distinct est créé pour terminer chacun d’eux. Ainsi, bien que mon appel AJAX puisse durer 10 à 15 secondes, je ne bloque l'utilisateur que pendant une fraction de seconde, en raison de l'exécution linéaire de la fonction.

Il y a des manières moins élégantes de contourner cela ... mettre une boucle pour se terminer uniquement lorsqu'une valeur de retour définie par la fonction AJAX est définie sur true, ou quelque chose de ce genre. Mais cela semble inutilement compliqué et inefficace.

Était-ce utile?

La solution

Quelle que soit la manière dont vous accomplissez vos routines Ajax, vous avez besoin d’un "rappel". fonction qui fonctionnera une fois terminée:

function ajaxCall(callback){
    //do ajax stuff...
    callback();
}

Ensuite:

function doStuff(){
    blockUI();
    ajaxCall(unblockUI);
}

Autres conseils

Votre appel AJAX doit spécifier une fonction de rappel. Vous pouvez appeler l’unblockUI à partir du rappel.

SAJAX est une simple bibliothèque AJAX qui offre une aide supplémentaire pour effectuer des appels AJAX.

Il y a aussi un autre article qui décrit ce que vous recherchez.

Vous pouvez faire un xhr synchrone. Ceci provoquerait le blocage complet de l'interface utilisateur pendant toute la durée de l'appel (peu importe le temps que cela pourrait prendre).

Vous devez repenser votre flux de programme pour qu'il soit compatible avec le flux asynchrone, par exemple en spécifiant une fonction de rappel à appeler après le traitement de la réponse. Découvrez comment Prototype ou JQuery ou ... le fait.

La réponse est simple, vous devez appeler unblockUI () lorsque votre requête ajax retourne le résultat. Avec jQuery, vous pouvez le faire comme suit:

function doStuff(){

    blockUI();

    jQuery.ajax({
        url: "example.com",
        type: "POST",           //you can use GET or POST
        success: function(){

            unblockUI();
        }
    });
}

Il me semble que vous voulez que l'utilisateur attende pendant que les informations sont extraites de la base de données. Ce que je fais lorsque je passe un appel à Ajax pour obtenir des informations dans la base de données, c’est d’afficher un gif animé qui indique "obtention du message ...". - il clignote continuellement jusqu'à ce que les informations soient récupérées et affichées sur la page Web. Lorsque les informations sont affichées, le gif animé est désactivé / masqué et le focus est déplacé vers les nouvelles informations affichées. Le gif animé permet à l'utilisateur de savoir qu'il se passe quelque chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top