Incapable de récupérer un objet json, encore...

Fermé
ephelya Messages postés 282 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 1 mai 2018 à 16:31
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 - 1 mai 2018 à 19:42
Bonjour,

J'ai un script ajax qui récupère une série de phrases depuis un fichier php.
$(document).ready(function () {
    $.ajax({
			 	data: {iduser:''},
				type: "POST",
				dataType: 'json',
				url: "<?php echo HOME; ?>getpacks.php", //Relative or absolute path to response.php file
				error : function(x,err){
				         alert(err);
				        },	    
			    success: function(data)
			    {
                                 console.log(data);
                                 var theme = data.name;
                                 var phrases = data.phrases;
                                 console.log("thème "+theme+" et phrases "+phrases);
                                 $(phrases).each(function(id, ph) {
                                 console.log("id: "+id+" phrase :"+ph)
                                 $(ph).each(function (a, b) {
                                    console.log("a "+a+" b "+b);
                                    $(b).each(function (c, d) {
                                     console.log("c "+c+" d "+d);
                            });
                        });
                    });
			    } 
});


et

         $packs = get_active_pack($iduser); 
	header('Content-Type: application/json');
	echo json_encode($packs);


        function get_active_pack($iduser)
     {
            $query = "SELECT idtheme idpack, name_".LANG." name  FROM ".PREFIX."packs_activ pa LEFT JOIN ".PREFIX."packs  p ON pa.idtheme=p.id  ANS statut = 1 AND iduser = $iduser";
      
		try{
		  $requete = $db -> prepare($query) ;
		  $requete->execute() ;
		  $res = $requete -> fetchAll();
		  $idpack = $res[0] -> idpack;
                  $pack['id'] = $idpack;
                   $pack['name'] = $res[0] -> name;

		      $query = "SELECT id,  ".LANG."_phrase phrase FROM ".PREFIX."phrases WHERE idtheme = $idpack";

                try{
                  $requete = $db -> prepare($query) ;
                  $requete->execute() ;
                    $phrases = $requete -> fetchAll();
                    foreach ($phrases as $phrase)
                    {
                        $listphrases[$phrase -> id] = $phrase -> phrase;
                    }
                    $keys = array_keys($listphrases);
                    shuffle($keys);

                    foreach($keys as $key) {
                        $new[$key] = $listphrases[$key];
                    }
                    $pack['phrases'] = $new; 
                  return ($pack);
                }catch(Exception $e){
                   echo " Erreur ! ".$e->getMessage();
                   echo " Les datas : " ;

		}	
} 


je récupère bien mes données, mais je n'arrive pas à exploite les phrases, voici ce que me donne la console

​Object { id: "2", name: "Thème 2", phrases: Object { 1: "phrase1843", 2: "phrase2"}}
thème Thème 2 et phrases [object Object]
id: 0 phrase :[object Object]
a 0 b [object Object]
c 0 d [object Object]


Qu'est-ce que je fais mal ? Pourquoi je ne récupère pas mes phrases ??
Merci d'avance pour le coup de pouce ! :-)

1 réponse

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
1 mai 2018 à 19:42
Bonjour,
Dans tes consoles.log tu mixe du "string" avec des objets... d'où l'affichage que tu obtiens....
Essayes plutot ça :
    success: function(data){
       console.log(data);
       var theme = typeof(data.name)!='undefined' ? data.name : null;
       var phrases = typeof(data.phrases)!='undefined' ? data.phrases : null;

       console.log("thème "+theme+" - phrases :");
       console.log(phrases);
       
       phrases.each(function(id, ph) {
       console.log("id: "+id+" - phrase :");
       console.log(ph);
        ph.each(function (a, b) {
          console.log("a "+a+" -  b :");
          console.log(b);
        });
      });
    }

0