javascript requete comment faire une requête jquery "$.post" synchrone




requete ajax jquery (3)

J'ai été googling ceci et évite cette erreur dans ma liste de correction de bogue pendant longtemps maintenant, mais j'ai finalement atteint la fin de la liste, le dernier dont je dois faire une fonction renvoyer vrai / faux pour indiquer si la validation a réussi ou non.

J'utilise ajax pour comparer certains champs avec ceux qui sont déjà dans la base de données et par défaut la méthode $.post() fait ses opérations de manière asynchrone.

Je mets une variable à l'intérieur de l'appel onSuccess et la méthode d'appel n'obtient pas de réponse à cause de cela, donc tous mes js / jquery échouent sur pageLoad ... Je préférerais pouvoir continuer à utiliser la méthode $.post .


jQuery <1,8

Puis-je vous suggérer d'utiliser $.ajax() au lieu de $.post() car il est beaucoup plus personnalisable.

Si vous appelez $.post() , par exemple, comme ceci:

$.post( url, data, success, dataType );

Vous pouvez le transformer en son $.ajax() :

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});

Veuillez noter async:false à la fin de l'objet de paramètre $.ajax() .

Vous trouverez ici un détail complet des paramètres $.ajax() : jQuery.ajax () - Documentation API jQuery .

jQuery> = 1.8 "async: false" avis de désapprobation

jQuery> = 1.8 ne bloquera pas l'interface utilisateur lors de la requête http, nous devons donc utiliser une solution de contournement pour arrêter l'interaction de l'utilisateur tant que la requête est traitée. Par exemple:

  • utiliser un plugin par exemple BlockUI ;
  • Ajoutez manuellement une superposition avant d'appeler $.ajax() , puis supprimez-la lorsque le .done() AJAX .done() est appelé.

S'il vous plaît jeter un oeil à cette réponse pour un exemple.


Si vous voulez une requête synchrone, définissez la propriété async sur false pour la requête. Découvrez le jQuery AJAX Doc


À partir des docs Jquery: vous spécifiez l'option async comme étant false pour obtenir une requête Ajax synchrone. Ensuite, votre rappel peut définir certaines données avant que votre fonction mère ne se poursuive.

Voici à quoi ressemblerait votre code s'il était modifié comme suggéré:

beforecreate: function(node,targetNode,type,to) {
    jQuery.ajax({
         url:    url,
         success: function(result) {
                      if(result.isOk == false)
                          alert(result.message);
                  },
         async:   false
    });          
}

c'est parce que $ .ajax est le seul type de demande que vous pouvez définir l'asynchronisme pour







html