[jQuery et PHP] Array d'objet en JSON ? [Résolu/Fermé]

Signaler
-
 skysork -
Bonjour,

Tout d'abord désolé je ne savais pas si je devais poster ce sujet dans PHP ou Javascript, vu que ma question concerne les deux:

Je suis débutant à ajax et n'y connais vraiment pas grand chose. Voila mon problème

-J'aimerais récupérer un array d'objets 'Article' (chaque article a un id, titre, lien, text, date, etc ...) depuis une reqûete ajax (donc vers depuis script PHP) et le recevoir dans ma fonction $.get jQuery, j'ai pensé que je devais utiliser le format JSON ? mais je n'y connais strictement rien a JSON: comment convertir un array d'objets Article en JSON, les récupérer en jQuery et les utiliser ?

Voici mon code:

Fonction jQuery:
function loadArticles(type, cat, filter, order, nb, from)
{
    $.get('./?ajax=loadArticles',
    {
        type: type,
        cat: cat,
        filter: filter,
        order: order,
        nb: nb,
        from: from
    },
    function(data)
    {
         
    }, 'text');
}


Script PHP appelé:
<?php
 
// verification des variables
if(isset($_GET['type']) && isset($_GET['cat']) && isset($_GET['filter']) && isset($_GET['order']) && isset($_GET['nb']) && isset($_GET['from']))
{
    list($type, $cat, $filter, $order, $nb, $from) = 0;
    if($_GET['type'] === ('astuce'||'news'||'all'))
    {
        $type = $_GET['type'];
    }
    if($_GET['cat'] === ('windows'||'graphics'||'hardware'||'software'||'programming'||'linux'||'security'||'highTech'||'videogames'||'internet'||'smartphones'))
    {
        $cat = $_GET['cat'];
    }
    if($_GET['filter'] == ('views'||'date_created'||'date_modified'))
    {
        $filter = $_GET['filter'];
    }
    if($_GET['order'] == ('croi'||'desc'))
    {
        $order = $_GET['order'];
    }
    if(is_int($_GET['nb']) && $_GET['nb'] > 0)
    {
        $nb = $_GET['nb'];
    }
    if(is_int($_GET['from']) && $_GET['from'] >= 0)
    {
        $from = $_GET['from'];
    }
 
    if($articles_manager->count() > 0)
    {
        $articles = $articles_manager->get_articles($type, $cat, $filter, $order, $nb, $from);
        // on sécurise
        if(isset($articles) && !empty($articles))
        {
            foreach($articles as $art)
            {
                $art->set_type($tools->secure_code($art->type(), 2));
                $art->set_category($tools->secure_code($art->category(), 2));
                $art->set_title($tools->secure_code($art->title(), 2));
                $art->set_link($tools->secure_code($art->link(), 2));
                $art->set_text($tools->secure_code($art->text(), 1));
                $art->set_pseudo_creator($tools->secure_code($manager->get_user($art->id_creator())->pseudo(), 2));
            }
        }
    }
}



Merci beaucoup pour votre aide !



2 réponses

Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
432
Salut,

Tu peux utiliser la fonction PHP json_encode() à la fin de ton traitement php pour retourner le tableaux des articles au format json :
echo json_encode($articles);


Coté js, tu vas pouvoir récupérer ce tableau d'articles au format json via la variable data de la fonction de retour de la requête ajax. Tu peux alors parcourir la variable data comme n'importe quel tableau d'objet js :
var nbArticles = data.length;

for (var i = 0; i < nbArticles; i++) {
  // un article
  console.log(data[i]);
  // titre d'un article
  console.log(data[i].titre);
}


Si jQuery n'arrive pas à détecter automatiquement le format json de la variable data, tu devras peut-être utiliser la fonction jQuery parseJSON pour utiliser facilement cette variable au début de la fonction de retour :
data = $.parseJSON(data);


Bonne journée,
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Merci pour ta réponse :)
je pense avoir fais les changements nécéssaires mais lorsque j'affiche console.log(data) dans le navigateur j'obtiens ca:
https://user.oc-static.com/upload/2016/11/02/1478115185542_Capture.PNG
et si je déplie un peu : https://user.oc-static.com/upload/2016/11/03/14781733658662_Capture.PNG
:/ et si je fais data[1].title par exemple j'obtiens "undefined" pareil si je fais data[2].text etc.. quel est le problème ??? merci !
Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
432
Peut tu essayer d'appeler la page PHP retournant la liste des articles directement via ton navigateur (sans passer par la requête ajax) afin de voir le code json retourné par ce fichier ?
Peux tu nous montrer ce retour json afin de voir où est le problème ?

Coté js, tu peux également essayer de faire un console.log(data[i]); ou console.log(data[1]); pour voir le détail d'un objet du tableau data.
Merci pour ton aide, je viens de résoudre mon problème :
un problème dans ma fonction display_json ligne 9,0 j'ajoutes le array donnée en paramètre au lieu de array_second que j'ai construis, j'ai rectifié et ça marche !