Jquery ajax recuperer valeur

Fermé
Irish - 9 déc. 2011 à 14:43
 Irish - 14 déc. 2011 à 18:43
Bonjour,

Voici mon problème :

j'exécute une requête AJAX en JQUERY et j'aimerai affecter une valeur de mon objet json à une variable dans le callback :

var reponse = '';
$.post(urlAjax,{param},function(data){
                    if (data.erreur == 'ok')
                    {
                        reponse = data.rep;
                        alert(reponse);
                    }
                    else
                    {
                        alert(data.erreur);
                    }
                    return reponse;
                },'json');
alert(reponse);


mon premier alert affiche bien la bonne valeur.

mon deuxième alert affiche variable vide... j'en conclu que ma variable 'reponse' n'est pas mise a jour.

Quelqu'un aurait il une solution ?

2 réponses

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
9 déc. 2011 à 16:03
En fait ton "deuxième" alert est appelé en premier de manière synchrone alors qu'il n'a pas encore de valeur puisqu'il ne prend sa valeur de manière asynchrone que lorsque la fonction est appelée juste avant ton "premier" alert.

Remarque : jQuery propose une méthode de haut niveau jQuery.getJSON pour t'éviter ton post.

var reponse = '';

$.getJSON(urlAjax,{param},success);
alert(reponse);

//...

function success(data, textStatus, jqXHR)
{
    if (data.erreur == 'ok')
    {
        reponse = data.rep;
        alert(reponse);
    }
    else
    {
        alert(data.erreur);
    }
}
1
Merci beaucoup pour ta réponse, c'est un détail que j'avais oublié en effet.
Je n'ai pas réussi a faire fonctionner ta méthode comme je voulais et j'ai donc opté pour une simple requête AJAX en mode synchrone :

var reponse = '';

$.ajax({
        type: "POST",
        url: "ajax.php",
        data: "param=param",
        async: false,
        dataType: "json",
        success: function(data){
            if (data.erreur == 'ok')
            {
                reponse = data.rep;
            }
            else
            {
                alert(data.erreur);
            }
        }
    });
0