[resolu] comment récupérer le contenu d'un json avec jquery

comment récupérer le contenu d'un json avec jquery [resolu] - HTML/CSS - Programmation

Marsh Posté le 29-10-2011 à 09:18:17    

Bonjour
 
je découvre l'ajax depuis hier soir très tard et là je sèche sur l'interprétation du retour.  
 
J'arrive à interroger le serveur et à obtenir une réponse de type "json". Donc quand je fais ceci :
 

Code :
  1. function showUser(str)
  2. {
  3.        var reponse = $.ajax({
  4.            type: "GET",
  5.            dataType:"json",
  6.            url: "controleur/etablissement/getuser.php",
  7.            data: "id_personne="+str,
  8.            success: parse(reponse)
  9.        });
  10. }


 
et bien ça me renvoie ceci :
 

Code :
  1. {"id_personne":"4","0":"4","id_civilite":"Mr","1":"Mr","nom":"AZAZ","2":"AZAZ","nom_jeune_fille":"","3":"","prenom":"","4":"","sexe":null,"5":null,"num_ss":null,"6":null,"date_naissance":null,"7":null,"commentaire":"","8":"","photo":null,"9":null,"date_creation":"23\/10\/2011 08:59","10":"23\/10\/2011 08:59","auteur_creation":"mburea27","11":"mburea27","date_maj":"23\/10\/2011 12:57","12":"23\/10\/2011 12:57","auteur_maj":null,"13":null,"id_role":"ADMIN","14":"ADMIN","id_etablissement":"1","15":"1","adresse_ligne1":"adresse 1","16":"adresse 1","adresse_ligne2":"","17":"","adresse_ligne3":"","18":"","adresse_ligne4":"","19":"","code_postal":"59190","20":"59190","commune":"hazeb","21":"hazeb","id_code_pays":"FR","22":"FR","login":null,"23":null}


 
Et c'est parfait , donc mon navigateur et le serveur communiquent bien.  
 
Ma question est comment je fais ensuite côté navigateur pour récupérer le contenu de chaque variable et les mettre dans mon formulaire.
 
J'ai tenté une fonction "parse(reponse)" en cas de success de l'appel mais ça marche pas :
 

Code :
  1. function parse(str)
  2. {
  3. var obj = jQuery.parseJSON(str);
  4. alert( obj.nom );
  5. }


 
 
Quelqu'un pourrait m'aider et m'expliquer ce qui ne va pas ? Je ne dois pas être très loin je pense. Merci à tous.
 
Dominique


Message édité par domi_bu le 30-10-2011 à 08:10:25

---------------
Domi
Reply

Marsh Posté le 29-10-2011 à 09:18:17   

Reply

Marsh Posté le 30-10-2011 à 02:43:49    

dans ce code :

Code :
  1. function showUser(str)
  2. {
  3.        var reponse = $.ajax({
  4.            type: "GET",
  5.            dataType:"json",
  6.            url: "controleur/etablissement/getuser.php",
  7.            data: "id_personne="+str,
  8.            success: parse(reponse)
  9.        });
  10. }


il faut juste que tu passes "parse", et non "parse (reponse)" ce qui execute la fonction.
 
Dans parse, et en accord avec l'API de jQuery ( http://api.jquery.com/jQuery.ajax/ [...] x-settings ), le premier param est data, donc dans ton cas directement ton json, pas besoin de faire un parseJSON dessus.
 
A essailler


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 30-10-2011 à 08:10:05    

ça fonctionne ! merci SICKofitALL
 
je fais ceci et ça fonctionne :  
 

Code :
  1. var reponse = $.ajax({
  2.         type: "GET",
  3.         dataType:"json",
  4.         url: "controleur/etablissement/getuser.php",
  5.         data: "id_personne="+str,
  6.         complete: vider_formulaire(),
  7.         success: function fill_form(reponse){
  8.                // alert("nom="+reponse.nom);
  9.        
  10.        
  11.                $("#id_personne" ).val(reponse.id_personne);
  12.                $("#id_civilite" ).val(reponse.id_civilite);
  13.                $("#nom" ).val(reponse.nom);
  14.                $("#prenom" ).val(reponse.prenom);
  15.                $("#adresse_ligne1" ).val(reponse.adresse_ligne1);
  16.                $("#adresse_ligne2" ).val(reponse.adresse_ligne2);
  17.                $("#adresse_ligne3" ).val(reponse.adresse_ligne3);
  18.                $("#adresse_ligne4" ).val(reponse.adresse_ligne4);
  19.                $("#code_postal" ).val(reponse.code_postal);
  20.                $("#commune" ).val(reponse.commune);
  21.                $("#id_code_pays" ).val(reponse.id_code_pays);
  22.                $("#id_role" ).val(reponse.id_role);
  23.                $("#titre_formulaire" ).html("Modifier une personne" );
  24.                } // fermeture fonction de remplissage formulaire
  25.     });        // fermeture appel ajax


 
encore une dernière question : vaut il mieux faire comme j'ai fait ? ou plutôt créer une fonction en dehors de l'appel (pour plus de lisibilité). Que fais tu habituellement ?
 
Dominique

Reply

Marsh Posté le 30-10-2011 à 11:29:33    

Perso je passe les fonctions sous la forme de callback, càd que je met juste le nom de la fonction, sans les parenthèses.
Si tu les mets, ca execute la fonction direct, ce qui est en général pas ce que tu veux.
D'ailleurs dans ton code, dans "complete", tu executes cash "vider_formulaire", alors que à mon avis tu voudrais plutot que lorsque la requete ajax est complete, il execute à ce moment cette fonction. En clair, vire tes parentheses ;)
 
Ca donnerait un truc comme ca :

Code :
  1. var vider_formulaire = function ()
  2.   {
  3.     // ton code...
  4.   },
  5.   fill_form = function (reponse)
  6.     {
  7.                if (!reponse) {  // on teste reponse, si il est undefined on fait rien
  8.                   return false;
  9.                }
  10.                $("#id_personne" ).val(reponse.id_personne);
  11.                $("#id_civilite" ).val(reponse.id_civilite);
  12.                $("#nom" ).val(reponse.nom);
  13.                $("#prenom" ).val(reponse.prenom);
  14.                $("#adresse_ligne1" ).val(reponse.adresse_ligne1);
  15.                $("#adresse_ligne2" ).val(reponse.adresse_ligne2);
  16.                $("#adresse_ligne3" ).val(reponse.adresse_ligne3);
  17.                $("#adresse_ligne4" ).val(reponse.adresse_ligne4);
  18.                $("#code_postal" ).val(reponse.code_postal);
  19.                $("#commune" ).val(reponse.commune);
  20.                $("#id_code_pays" ).val(reponse.id_code_pays);
  21.                $("#id_role" ).val(reponse.id_role);
  22.                $("#titre_formulaire" ).html("Modifier une personne" );
  23.     },
  24.   reponse = $.ajax({
  25.         type: "GET",
  26.         dataType:"json",
  27.         url: "controleur/etablissement/getuser.php",
  28.         data: "id_personne="+str,
  29.         complete: vider_formulaire,
  30.         success: fill_form
  31.     });        // fermeture appel ajax


 
Au passage, je vois que tu utilises des alerts. Oublies ca et passe à Firebug si tu es sous firefox ou aux outils de developpements intégrés à ton browser (touche F12 pour les ouvrir sous Chrome, IE et Opera aussi je crois).
Fais des console.log pour afficher tes objets sous forme de chaines, ou mieux des consoles.dir si c'es comme chez toi du JSON
-> http://getfirebug.com/wiki/index.p [...] _....5D.29


---------------
We deserve everything that's coming...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed