Récupérer tableau associatif en json.... [Résolu/Fermé]

Signaler
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021
-
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021
-
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 !! :-)

4 réponses

Messages postés
31619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 mars 2021
3 304
Bonjour
Tu dois boucler sur les donnees
Voir each

Cordialement, 
Jordane                                                                 
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021
2
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... :'(
Messages postés
31619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 mars 2021
3 304
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.....
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021
2
Ca m'affiche
Object { name: "Titre 11", phrases: Object, id: "630" }
Messages postés
31619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 mars 2021
3 304
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);
}
Messages postés
31619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 mars 2021
3 304 >
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021

Sauf que tes phrases... sont toujours sérialisées !
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021
2
oui, pardon j'ai oublié de supprimer mon dernier test, mais ça ne change rien, voici la réponse de la console pour console.log(data) :
{"name":"test","phrases":{"5522":"test de phrase","5696":"une autre phrase"},"id":"739"}

et pour la fonction each
 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in 		{"name":"test","phrases":{"5522":"test de phrase","5696":"une autre phrase"},"id":"739"}
at isArrayLike (https://code.jquery.com/jquery-1.12.4.js:569:33)
at Function.each (https://code.jquery.com/jquery-1.12.4.js:367:8)
at Object.success (http://new.sublym.org/www/packs-attraction:532:7)
at fire (https://code.jquery.com/jquery-1.12.4.js:3232:31)
at Object.fireWith [as resolveWith] (https://code.jquery.com/jquery-1.12.4.js:3362:7)
at done (https://code.jquery.com/jquery-1.12.4.js:9840:14)
at XMLHttpRequest.callback (https://code.jquery.com/jquery-1.12.4.js:10311:8)
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021
2
et console.log(data['phrases"})) sort toujours undefined (ainsi que data.phrases et data[phrases]
Messages postés
31619
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 mars 2021
3 304
Faits moi un dump de ta table
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021
2
j'en serais ravie mais je n'ai pas la moindre idée de ce que ça veut dire ! :D
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021
2
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 */;
Messages postés
255
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
7 février 2021
2
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 !! :-)