Récupérer tableau associatif en json....

Résolu/Fermé
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - Modifié par STARGATE43 le 18/10/2016 à 01:42
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 25 oct. 2016 à 00:40
Bonjour,

Je cherche à faire un script en ajax qui récupère dans la bdd des titres de listes + le contenu de ces listes pour les afficher. Pour le titre et l'id, aucun problème, mais je n'arrive pas à afficher le contenu des listes.... Je débute en ajax, et j'ai beau chercher je ne trouve pas ma réponse. Quelqu'un peut m'aider sioupléé??
Voici ma fonction jquery

$.ajax({
type: "POST",
dataType: "json",
url: "http://monfichier.php",
data:
data,
success: function(data) {
$("#showlist").append("<h1 id='titphrases'>Contenu de la liste <span id='updaten'>"+ data["name"] +"</span></h1>");
alert(data["phrases"]);
}
});


et voicci monfichier.php
		
$query = "SELECT id, item FROM items WHERE idliste=:valeur1";
$datas = array(':valeur1'=>$id);
try{
$requete = $db -> prepare($query) ;
$requete->execute($datas) ;
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
//print_r($datas);
}
$result = $requete->fetchAll();
foreach ($result as $phrase)
{
$list['items'][$item -> id] = $item -> item;
}
$list['items']=serialize($list['items']);
$list['id'] = $id;

echo json_encode($list);

Je sais que ce n'est pas la bonne façon de faire, mais c'est tout ce que j'ai trouvé... :-/

mon html me donne bien
<div id="showlist" style=""><h1 id="titphrases">Contenu de la liste <span id="updaten">liste 1</span></h1></div>


et le alert me donne

a:4:{i:4946;s:39:"item 1";i:4945;s:24:"item2";i:4943;s:31:"item2";i:4944;s:37:"item3";}

Comment je dois m'y prendre pour récupérer ma liste d'items et l'afficher comme je veux ??
Merci d'avance pour votre aide !! :-)
A voir également:

4 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié par jordane45 le 18/10/2016 à 09:25
Bonjour
Tu dois boucler sur les donnees
Voir each

Cordialement, 
Jordane                                                                 
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
18 oct. 2016 à 10:46
Bonjour Jordane,
Oui j'ai bien pensé à each, mais quel élément j'utilise ? Le tableau des items arrive sérialisé et je ne sais pas comment utiliser each avec ça ni comment le dé-séraliser...
J'ai tenté un split mais je pense qu'il y a plus propre comme méthode et de toute façon je n'ai pas réussi...
Et si j'envoie le tableau sans le sérialiser, un alert sur le tableau des items me donne
[object Object]
, et je ne sais pas quoi en faire non plus... :'(
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
18 oct. 2016 à 11:09
Fais un console.log de data dans ton success
success: function(data) {
console.log(data);
$("#showlist").append("<h1 id='titphrases'>Contenu de la liste  <span id='updaten'>"+ data["name"] +"</span></h1>");
   alert(data["phrases"]);
}

et regarde dans la CONSOLE de ton navigateur (firefox ou chrome) ce que ça te donne.
Colle nous le contenu ici qu'on puisse voir à quoi ça ressemble.....
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
18 oct. 2016 à 13:04
Ca m'affiche
Object { name: "Titre 11", phrases: Object, id: "630" }
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié par jordane45 le 18/10/2016 à 15:23
Donc:
data.id contient l'ID
et data.phrases te donne la phrase.
success: function(data) {
console.log(data);
var html = "<h1 id='titphrases_"+data.id+"' >Contenu de la liste  <span id='updaten_"+data.id+"'>"+ data.name +"</span></h1>";
html +=" <span>" + data.phrases +"<span>";
$("#showlist").append(html);
}
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
18 oct. 2016 à 16:31
data.phrases ne me donne pas la phrase, ça me dit juste que c'est un objet
C'est précisément le tableau de phrases pur lequel j'ai besoin d'un each ou autre chose :-)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023
18 oct. 2016 à 16:34
fais un console.log de phrases et montre moi ce qu'il contient.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
18 oct. 2016 à 16:35
c'est ça ? :

a:4:{i:4946;s:39:"item 1";i:4945;s:24:"item2";i:4943;s:31:"item2";i:4944;s:37:"item3";}

Je viens de voir que tu avais sérialisé les données ... pourquoi faire ??
Retire, dans le PHP, le serialize
ensuite tu pourra facilement boucler dessus
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
Modifié par ephelya le 21/10/2016 à 18:37
Oui, je me suis rendu compte entre temps que ça ne servait à rien, j'ai supprimé le serialize ;-)
Par contre je suis toujours bloquée, avec une erreur en plus que je ne comprends pas.
Je récupère bien mes données dans le script php puisque voici ce que me donne console.log(data)

{"name":"Titre 8","phrases":{"4540":"phrase 1","4539":"phrase 2"}, "id":"85"}

Mais pas moyen d'afficher quoi que ce soit :
$("#showlist").append("<h1 id='titphrases'>Contenu de la liste <span id='updaten'>"+data["name"]+"</span></h1>");
m'affiche "Contenu de la liste undefined" et j'ai aussi "undefined" avec console.log(data["phrases"]) ...
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié par jordane45 le 21/10/2016 à 18:51
C'est en json
Donc data.name
Et data.phrases
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
Modifié par ephelya le 24/10/2016 à 19:26
Ca répond à la question, je pense ?

-- phpMyAdmin SQL Dump
-- version 4.2.12deb2+deb8u2
-- http://www.phpmyadmin.net
--
--
Client : localhost
-- Généré le : Lun 24 Octobre 2016 à 19:23
-- Version du serveur : 10.0.27-MariaDB-1~jessie
-- Version de PHP : 5.6.24-0+deb8u1

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de données : `test_def`
--

-- --------------------------------------------------------

--
-- Structure de la table `92_dlMoQd_phrases`
--

CREATE TABLE IF NOT EXISTS `92_dlMoQd_phrases` (
`id` int(5) NOT NULL,
`idtheme` int(5) NOT NULL,
`M_FR_phrase` varchar(300) NOT NULL,
`F_FR_phrase` varchar(300) NOT NULL,
`type` varchar(100) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=5697 DEFAULT CHARSET=utf8;

--
-- Contenu de la table `92_dlMoQd_phrases`
--

INSERT INTO `92_dlMoQd_phrases` (`id`, `idtheme`, `M_FR_phrase`, `F_FR_phrase`, `type`) VALUES
(5522, 739, 'test de phrase', 'test de phrase', '2'),
(5696, 739, 'une autre phrase', 'une autre phrase', '');

--
-- Index pour les tables exportées
--

--
-- Index pour la table `92_dlMoQd_phrases`
--
ALTER TABLE `92_dlMoQd_phrases`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT pour les tables exportées
--

--
-- AUTO_INCREMENT pour la table `92_dlMoQd_phrases`
--
ALTER TABLE `92_dlMoQd_phrases`
MODIFY `id` int(5) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5697;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
0
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
25 oct. 2016 à 00:40
Le problème est réglé !!!!
Moi je ne comprends toujours pas ce qui s'est passé, mais un ami dev m'a dit que je n'envoyais pas du json et m'a fait ajouter une ligne avant mon echo
			
header('Content-Type: application/json');
echo json_encode($list);

J'ai donc enfin pu utiliser tes conseils et afficher mes phrases avec la fonction each que tu m'as donnée.... Ouf !!!
Merci infiniment pour ton aide et ta patience !! :-)
0