Billet du blogue

Du AJAX synchrone avec jQuery

Prenez le code jQuery suivant :

function validerServeur(value) {
  var valide;
  $.get("valide.php", { valeur: value }, function(data) {
    valide = (parseInt(data) === 1) ? true : false;
  }
  return valide;
}

Ce code effectue une requête AJAX au serveur et retourne si une valeur est valide ou non. Le problème? Lorsque $.get est appellée, la fonction continue, et le return valide est exécutée, alors que le callback de la requête AJAX n’a pas encore été exécutée! Et il n’est pas possible d’effectuer le code suivant :

valide = (parseInt(data) === 1) ? true : false;
return valide;

Puisque le scope est sur l’objet $.get. Que faire, alors? La réponse est : « requête AJAX synchrone ». On peut effectuer des requêtes synchrones avec jQuery à l’aide de la méthode $.ajax qui est l’élément « parent » de la méthode $.get comme je l’avais expliqué dans « Entêtes HTTP, AJAX et jQuery ». Le code à utiliser est donc le suivant :

function validerServeur(value) {
  var valide;
  $.ajax(
    url: "valide.php",
    data: { valeur: value },
    async: false,
    succes: function(data) {
      valide = (parseInt(data) === 1) ? true : false;
    }
  )
  return valide;
}

Lorsqu’on ajoute le paramètre async: false, on demande au navigateur d’arrêter l’exécution du script en cours tant que la requête n’est pas complétée. Cela interrompt l’exécution du code Javascript, mais cela nous permet de récupérer notre valeur, et de la retourner par la suite.

Posté le avec les tags: , et .

Commentaires fermés

Les commentaires pour ce billet ont été désactivés un mois après la date de publication de ce-dernier. Vous désirez exprimer votre opinion sur ce billet malgré le fait que les commentaires aient été désactivés ? Utilisez le formulaire de contact.


Fil atom des commentaires de ce billet5 commentaires