Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    février 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2013
    Messages : 213
    Points : 115
    Points
    115

    Par défaut Un JSON.parse qui retourne undefined

    Bonjour tout le monde.
    Voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var liens = [
        {
            titre: "So Foot",
            url: "http://sofoot.com",
            auteur: "yann.usaille"
        },
        {
            titre: "Guide d'autodéfense numérique",
            url: "http://guide.boum.org",
            auteur: "paulochon"
        },
        {
            titre: "L'encyclopédie en ligne Wikipedia",
            url: "http://Wikipedia.org",
            auteur: "annie.zette"
        }
    ];
       	document.body.innerHTML += JSON.parse(liens);
    Et voila le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "[object Object],[object Object],[object Object]"
    EN fait je ne veux pas afficher tout le tableau je veux afficher juste un titre ou un auteur par exemple.
    Mais si je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JSON.parse(liens).titre;
    Ca fait du caca et en plus ça marche pas.

    J'ai essayer d'autres trucs qui me renvoient undefined ou rien.
    Une idée?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    juin 2010
    Messages
    2 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : juin 2010
    Messages : 2 832
    Points : 6 107
    Points
    6 107

    Par défaut

    Tu n’as pas besoin de parser, ta variable liens est déjà un objet. Le contraire de parse est JSON.stringify(). Mais je pense que tu n’en as pas besoin non plus : essaye simplement liens[0].titre, liens[1].titre, liens[0].auteur, etc.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre régulier Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    février 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2013
    Messages : 213
    Points : 115
    Points
    115

    Par défaut

    Ok je comprend, merci.
    Deuxième étape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // Exécute un appel AJAX GET
    // Prend en paramètres l'URL cible et la fonction callback appelée en cas de succès
    function ajaxGet(url, callback) {
        var req = new XMLHttpRequest();
        req.open("GET", url);
        req.addEventListener("load", function () {
            if (req.status >= 200 && req.status < 400) {
                // Appelle la fonction callback en lui passant la réponse de la requête
                callback(req.response);
            } else {
                console.error(req.status + " " + req.statusText + " " + url);
            }
        });
        req.addEventListener("error", function () {
            console.error("Erreur réseau avec l'URL " + url);
        });
        req.send(null);
    }
     
    function afficher(reponse) {
    	var films = JSON.parse(reponse);
       	document.body.innerHTML += films[0].titre;
     
    }
     
    ajaxGet("http://localhost/javascript-web-srv/data/films.json", afficher);
    le fichier JSON:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [
        {
            " titre " : " Le Loup de Wall Street " ,
            " annee " : " 2013 " ,
            " realisateur " : " Martin Scorsese "
        },
        {
            " titre " : " Vice-Versa " ,
            " annee " : " 2015 " ,
            " realisateur " : " Pete Docter "
        },
        {
            " titre " : " Babysitting " ,
            " annee " : " 2013 " ,
            " Realisateur " : " Philippe Lacheau et Nicolas Benamou "
        }
    ]
    Là, ça me renvoie undefined.
    Encore une idée?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  4. #4
    Membre régulier Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    février 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2013
    Messages : 213
    Points : 115
    Points
    115

    Par défaut

    J'ai trouver:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.body.innerHTML += films[0][" titre "];
    Là ça marche.
    Mais y a pas moyen de supprimer les espaces?
    Ça donne rien si je modifie le fichier JSON.

    Pour être plus précis, je ne veux pas "parse" puis supprimer les espaces je veux "parse" sans les espaces.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  5. #5
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    14 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 14 475
    Points : 29 288
    Points
    29 288

    Par défaut

    Bonjour,

    il faut enlever tous les espaces inutiles DANS le fichier .json :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "_titre_" : "_Le Loup de Wall Street_"
    ...
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [
        {
           "titre":"Le Loup de Wall Street",
           "annee":"2013",
           "realisateur":"Martin Scorsese"
        },
        {
           "titre":"Vice-Versa",
           "annee":"2015",
           "realisateur":"Pete Docter"
        },
        {
           "titre":"Babysitting",
           "annee":"2013",
           "Realisateur":"Philippe Lacheau et Nicolas Benamou"
        }
    ]
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function afficher(reponse) {
    	var films = JSON.parse(reponse);
    	var html = '';
    	for(var film in films)
    	{
    		html += 'titre : <b>' + films[film].titre + '</b><br />';
    		html += 'année : ' + films[film].annee + '<br />';
    		html += 'réalisateur : ' + films[film].realisateur + '<br /><br />';
    	}
    	document.body.innerHTML = html;
    }
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    juin 2010
    Messages
    2 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : juin 2010
    Messages : 2 832
    Points : 6 107
    Points
    6 107

    Par défaut

    Effectivement, si tu peux appliquer la solution de jreaux62, c’est le mieux. Dans le cas contraire il faudrait faire une recherche de sous-chaîne dans chaque clé de chacun des objets du tableau, et je pense que je ne surprends personne si je dis que ce n’est pas efficace.

    Au fait, tu devrais utiliser textContent au lieu de innerHTML.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #7
    Membre régulier Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    février 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2013
    Messages : 213
    Points : 115
    Points
    115

    Par défaut

    Non j'avais déjà essayer mais le "req.response" contient des espaces malgré le fait que je les ai supprimé dans le fichier JSON.
    Si quelqu'un à une idée, je reviendrai jeter un coup d’œil, sinon c'est pas grave.
    Merci de votre aide.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  8. #8
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    juin 2010
    Messages
    2 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : juin 2010
    Messages : 2 832
    Points : 6 107
    Points
    6 107

    Par défaut

    Citation Envoyé par Pecose Voir le message
    malgré le fait que je les ai supprimé dans le fichier JSON.
    Comment as-tu édité ce fichier JSON ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  9. #9
    Membre régulier Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    février 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : février 2013
    Messages : 213
    Points : 115
    Points
    115

    Par défaut

    Avec Sublime Text.
    Je répond plutôt à la question "avec quoi" mais si j'ai mal interpréter la question il faut dire que je ne l'ai pas compris.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  10. #10
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    juin 2010
    Messages
    2 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : juin 2010
    Messages : 2 832
    Points : 6 107
    Points
    6 107

    Par défaut

    Tu as raison, j’ai mal posé ma question. Je me demandais si tu ne modifiais pas une copie locale, et si l’original resterait inchangé. Ça expliquerait pourquoi les espaces « réapparaissent » alors que tu les supprimes.

    Sinon ça peut aussi être un problème de cache. Essaye en rajoutant un paramètre cache buster :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    ajaxGet("http://localhost/javascript-web-srv/data/films.json?c=" + Math.random(), afficher);

    Note : le cache buster n’est pas une solution optimale, dans l’idéal il faudrait configurer le serveur pour qu’il envoie des en-têtes adaptés.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/02/2016, 11h03
  2. Undefined : Fonction qui retourne un tableau
    Par itokia dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 18/06/2014, 08h59
  3. Fonction qui retourne plusieurs valeurs !
    Par casafa dans le forum C++
    Réponses: 20
    Dernier message: 23/04/2014, 16h56
  4. [Prototype] Appel d'un web service qui retourne un JSON en javascript
    Par cocobelle89 dans le forum Bibliothèques & Frameworks
    Réponses: 13
    Dernier message: 30/05/2013, 18h50
  5. Variable qui retourne "undefined"
    Par chok371 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/01/2011, 20h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo