[jQuery et PHP] Array d'objet en JSON ?

Résolu/Fermé
Skysor - 1 nov. 2016 à 17:16
 skysork - 7 nov. 2016 à 12:38
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 !



A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
2 nov. 2016 à 16:07
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 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 !
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
7 nov. 2016 à 11:29
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.
0
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 !
0