Qu'est-ce que" async: false " fait dans jQuery.ajax()?

en particulier, en quoi diffère-t-il de la valeur par défaut ( async: true )?

dans quelles circonstances voudrais-je préciser async à false , et est-ce que cela a quelque chose à voir avec empêcher d'autres événements sur la page de tirer ?

202
demandé sur Sujith PS 2009-09-25 20:30:17

7 réponses

est - ce que ça a quelque chose à voir avec prévenir d'autres événements sur la page à partir de tir?

Oui.

mettre async à false signifie que l'instruction que vous appelez doit être terminée avant que la prochaine instruction de votre fonction puisse être appelée. Si vous définissez async: true alors cette instruction commencera son exécution et la prochaine instruction sera appelée indépendamment du fait que l'instruction async soit terminée ou non.

pour plus de détails voir: ajax de jQuery succès anonyme portée de la fonction

245
répondu Sean Vieira 2017-05-23 10:31:30
  • async:false = Code en pause . (Autre code en attente pour terminer.)
  • async:true = Code suite . (Rien n'est mis en pause. L'autre code est n'attend pas .)

aussi simple que cela.

85
répondu 夏期劇場 2017-04-03 03:41:04

Async:False retiendra l'exécution du code rest. Une fois que vous obtenez la réponse d'ajax, ce n'est qu'alors que le reste du code s'exécute.

20
répondu Mohit 2015-01-05 17:43:48

si vous désactivez la récupération asynchrone, votre script bloquera jusqu'à ce que la demande soit satisfaite. C'est utile pour exécuter une séquence de requêtes dans un ordre connu, bien que je trouve que les callbacks async sont plus propres.

16
répondu John Millikin 2009-09-25 16:33:58

de

https://xhr.spec.whatwg.org/#synchronous-flag

XMLHttpRequest synchrone en dehors des travailleurs est en train d'être retiré de la plate-forme web car il a des effets préjudiciables à l'expérience de l'utilisateur final. (C'est un long processus qui prend plusieurs années.) Les développeurs ne doivent pas passer false pour l'argument async lorsque L'environnement JavaScript global est un environnement de document. Les agents utilisateurs sont fortement encouragé à mettre en garde contre une telle utilisation dans les outils de développement et peut expérimenter de lancer une exception InvalidAccessError quand il se produit. La direction future est de n'autoriser les requêtes XMLHTTP que dans les threads worker. Le message se veut un avertissement à cet effet.

6
répondu i474232898 2016-01-15 14:44:58

Un cas d'utilisation est de prendre une ajax appel avant que l'utilisateur ferme la fenêtre ou quitte la page. Ce serait comme supprimer certains enregistrements temporaires dans la base de données avant que l'utilisateur peut naviguer vers un autre site ou ferme le navigateur.

 $(window).unload(
        function(){
            $.ajax({
            url: 'your url',
            global: false,
            type: 'POST',
            data: {},
            async: false, //blocks window close
            success: function() {}
        });
    });
4
répondu Tony 2013-12-18 21:06:10

mettre async à false signifie que les instructions suivant la requête ajax devront attendre que la requête soit complète. Ci-dessous se trouve un cas où il faut définir async à false, pour que le code fonctionne correctement.

var phpData = (function get_php_data() {
  var php_data;
  $.ajax({
    url: "http://somesite/v1/api/get_php_data",
    async: false, 
    //very important: else php_data will be returned even before we get Json from the url
    dataType: 'json',
    success: function (json) {
      php_data = json;
    }
  });
  return php_data;
})();

l'exemple ci-dessus explique clairement l'usage de async: false

en le mettant à false, nous avons fait en sorte qu'une fois les données sont retirées du url , seulement après que php_data de retour; est appelé

3
répondu Harsh Gupta 2018-05-04 16:09:22