1305 votes

Comment puis-je me jQuery pour effectuer une requête AJAX synchrone, plutôt asynchrone ?

J'ai un widget javascript qui fournit les points d'extension. L'un d'eux est l' beforecreate fonction. Il devrait revenir en false afin de prévenir un élément en cours de création.

J'ai ajouté un appel AJAX dans cette fonction à l'aide de jQuery:

beforecreate: function (node, targetNode, type, to) {
  jQuery.get('http://example.com/catalog/create/' + targetNode.id + '?name=' + encode(to.inp[0].value),

  function (result) {
    if (result.isOk == false) alert(result.message);
  });
}

Mais je veux éviter que mon widget à partir de la création de l'élément, donc je reviens false dans la mère-fonction, non pas dans le rappel. Est-il possible d'effectuer une synchronisé à une requête AJAX à l'aide de jQuery ou de toute autre API? Merci.

1240voto

Adam Bellaire Points 42797

De la documentation de Jquery: vous spécifiez l’option async est fausse pour obtenir une requête Ajax synchrone. Puis votre rappel réglable des données avant que le produit de votre fonction de mère.

Voici ce que votre code ressemblerait si changement proposé est donc :

274voto

Sydwell Points 1625

Vous pouvez mettre le programme d’installation de JQuery AJAX en mode synchrone en appelant

puis effectuez vos appels ajax en utilisant jQuery.get (...) ;

alors juste mettre en marche une fois

Je suppose que cela fonctionne la même chose comme suggéré par @Adam mais pourrait être utile à quelqu'un qui ne veut pas reconfigurer leurs jQuery.Get ou jQuery.post à la syntaxe plus élaborée de la jQuery.Ajax

146voto

James in Indy Points 605

Excellente solution ! J’ai remarqué quand j’ai essayé de mettre en œuvre que si je suis retourné une valeur dans la clause de succès, il revint comme indéfini. J’ai eu à les stocker dans une variable et retourne cette variable. Il s’agit de la méthode, avec que je suis venu :

92voto

BishopZ Points 2112

Toutes ces réponses ne manquez point que faire un appel AJAX avec async:false provoquera le navigateur s’accrocher jusqu'à la fin de la requête AJAX. Utilisation d’une bibliothèque de contrôle de flux résoudra ce problème sans raccrocher le navigateur. Voici un exemple avec Frame.js:

55voto

Carcione Points 136
function getURL(url){
    return $.ajax({
        type: "GET",
        url: url,
        cache: false,
        async: false
    }).responseText;
}


//example use
var msg=getURL("message.php");
alert(msg);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X