IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

jQuery Discussion :

Lecture d'un objet JSON [AJAX]


Sujet :

jQuery

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut Lecture d'un objet JSON
    Hello !

    je souhaite lire le résultat d'une requête sql dans un fichier js. Pour cela, j'ai utiliser le fameux $.ajax ... et json_encode. J'arrive à récupérer ma variable, mais c'est au moment de la parcourir que ce pose un problème.
    Je ne pense pas que vous ayez besoin du code php, par contre voici le code de mon js :
    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
    $.ajax(
    {
    	// Paramètres de la requête ajax
    	url:'../controllers/config.php',
    	type: 'GET',
    	datatype: 'json',
    	async: 'false',
    	// Pour envoyer une variable vers le php
    	data:{reloadPage: 1},
    	})
    	// Récupère la variable "document_commun"
    	.done(function(document_commun)
    	{
    		console.log(document_commun);
    		/*for(key in document_commun)
    		{
    			console.log(document_commun[key]);
    		}*/
    		$.each(document_commun, function(index, valeur)
    		{
    			console.log(valeur);
    		});
    		console.log("success");
    	});
                    /* la suite est inutile */
    Lorsque j'essaye de lire ma variable "document_commun" avec une boucle for, j'obtiens chaque lettre et non chaque mot. Malheureusement, avec $.each, je récupère l'erreur suivante :
    Uncaught TypeError: Cannot use 'in' operator to search for '49' in ["document_mutuelle","document_rentree"]
    J'ai lu pas mal de post sur ce sujet, mais comme je ne m'y connais pas trop en ajax, je n'ai pas réussi à m'en sortir.
    Vos commentaires/remarques sont les bienvenues

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    que donne un console.log(document_commun) sur le retour d'ajax ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    la console renvoie : ["document_mutuelle","document_rentree"]
    Ce sont les deux seules noms qui sont dans ma BDD.

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Par défaut
    Je pense que le résultat renvoyé devrait être de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"document_mutuelle"},{"document_rentree"}]
    pour que ça fonctionne

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    Je n'ai pas mis de :
    header('Content-type: text/json'); ou header('Content-type: application/json');
    Serait ce à cause de ça ? Si oui, où devrais le mettre dans mon php car j'ai essayé de le mettre avant le json_encode(maVariable);, mais ça n'a pas fonctionné. De même si je le met tout en haut de la page.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    ton retour n'est pas un json mais un array ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Par défaut
    Le problème vient de votre fichier config.php, il n'est pas necessaire de mettre de header(), il faut passer en paramètre de la fonction json_encode un tableau correctement formé.
    Par exemple vous écrivez ca dans config.php
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tab=array();
    array_push($tab,array('nom'=>'Folini','prenom'=>'Gerard'));
    array_push($tab,array('nom'=>'Durand','prenom'=>'Maurice'));
    echo json_encode($tab);

    Le resultat de json_encode sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"nom":"Folini","prenom":"Gerard"},{"nom":"Durand","prenom":"Maurice"}]
    Avec ce résultat ca devrait mieux fonctionner dans JQuery

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    Aah, le problème viendrait donc de mon array en php...
    J'ai écris mon tableau comme ceci :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function organiseResultatRequeteSQL($SQLRequest){
        // Tableau qui contiendra tous les éléments récupérés dans la BDD
        $docs = array();
        while ($element = $SQLRequest->fetch()){
            array_push($docs, $element['NOM_DOCUMENT']);
            //echo $element['NOM_DOCUMENT'];
        }
        return $docs;
    }

    Je vais essayer autrement, et je vous tiens au courant.
    Merci pour les conseils

    EDIT : Voilaaa, j'ai un peu changé mon tableau et je récupère du JSON a priori :
    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
     
    public function getdocumentCommunName()
    	{
                // Requête SQL récupérant les documents communs aux promos
                $this->SQLRequest = $this->bdd->query($this->SELECT_ALL_DOCUMENT_COMMUN);
     
                $this->documentCommunName = array();
                while ($element = $this->SQLRequest->fetch())
                {
                    array_push($this->documentCommunName, array('nomDocument'=>$element[$this->NOM_DOCUMENT]));
                }
     
                $this->SQLRequest->closeCursor();
                return $this->documentCommunName;
    	}
    et je récupère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"nomDocument":"document_mutuelle"},{"nomDocument":"document_rentree"}]
    Malheureusement, j'obtiens : Uncaught TypeError: Cannot use 'in' operator to search for '81' in [{"nomDocument":"document_mutuelle"},{"nomDocument":"document_rentree"}]
    Est ce encore du à un problème de conversion (JSON vers JS Object, vice versa etc...) ?

  9. #9
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    [{"nomDocument":"document_mutuelle"},{"nomDocument":"document_rentree"}]est un tableau d'objet, concrètement à chaque indice du tableau tu as un objet de type: {"nomDocument":"ton_nom_de_document"}lorsque tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for( var key in document_commun ){
      console.log( document_commun[key] ) // retourne {"nomDocument":"ton_nom_de_document"}
      console.log( document_commun[key].nomDocument ) // retourne "ton_nom_de_document"
    }

  10. #10
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    Effectivement, c'est le résultat que j'aimerais obtenir, mais console.log( document_commun[key]) retourne les caractères un par un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    [
    {
    "
    n
    o
    m
    D
    o
    c
    etc..
    Tandis que le deuxième console.log me renvoie un "undefined" =/

  11. #11
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    tu reçois donc une chaîne de caractère et non un objet JSON.

    peux tu afficher le code PHP ou tu retourne tes données avec la fonction json_encode ?

  12. #12
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    Voici le code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function miseAJourDocument(){
            // Instance de la classe BDD
            $bdd = new BDD();
            // Connexion à la BDD
            $bdd->connexionBDD();
            // On récupère les noms des documents communs contenus dans la BDD
            $document_commun = $bdd->getdocumentCommunName();
            // Envoie de la variable vers le fichier "config.js"
            echo json_encode($document_commun);
            // Destruction de l'objet BDD
            unset ($bdd);
    }

    Et pour ce qui est de la fonction getDocumentCommunName :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function getdocumentCommunName(){
            // Requête SQL récupérant les documents communs aux promos
            $this->SQLRequest = $this->bdd->query($this->SELECT_ALL_DOCUMENT_COMMUN);
            $this->documentCommunName = array();
            while ($element = $this->SQLRequest->fetch()){
                    array_push($this->documentCommunName, array('nomDocument'=>$element[$this->NOM_DOCUMENT]));
                    echo $element[$this->NOM_DOCUMENT];
            }
            $this->SQLRequest->closeCursor();
            return $this->documentCommunName;
    }

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    que dit le console js ?
    tu dois en principe voir ton objet en console et pas un string ...

    si tu vois un string c'est que ton php ne retourne pas le format !

    tu n'as aucune erreur en console?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  14. #14
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    Pour ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	for(var key in document_commun)
    	{
    		console.log(document_commun[key]);
            }
    J'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    d
    o
    c
    u
    m
    e
    n
    t
    etc...
    Et pour ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $.each(document_commun, function(index, valeur)
    {
    	console.log(valeur);
    });
    J'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Uncaught TypeError: Cannot use 'in' operator to search for '114' in 
    document_mutuelledocument_rentree[{"nomDocument":"document_mutuelle"},{"nomDocument":"document_rentree"}]

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(document_commun);
    donne quoi en dehors de ta boucle ?

    le but étant de savoir ce que tu reçois en réponse ... un string ou un objet
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  16. #16
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    Essaye en modifiant ton paramètre datatype en dataType

  17. #17
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    Effectivement, merci.
    Du coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log(document_commun);
    Renvoie "error"

  18. #18
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Par défaut
    Si le PHP te renvoie un String ou lieu d'un objet JSON essayes ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $.each(JSON.parse(document_commun), function(index, valeur) {
    	console.log(valeur.nomDocument);
    });
     
    ou 
     
    $.each($.parseJSON(document_commun), function(index, valeur) {
    	console.log(valeur.nomDocument);
    });

  19. #19
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 46
    Par défaut
    Depuis que j'ai changé le "datatype" en "dataType", le js part dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    .fail(function()
    {
    	console.log("error");
    })
    et me retourne donc "error".

  20. #20
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    Essaye de refaire le test inverse en remplaçant dataType par datatype mais je serais vraiment surpris que ce soit ça ( cf: ici )

    Ne développant que sur chrome je n'ai pas d'autre méthodes que celle ci pour voir si le script PHP retourne bien quelque chose et pas une erreur.

    Donc sur chrome, F12 => ouverture du developer tools, onglet Network, tu vas visualiser l'ensemble des fichiers chargés par ta page.

    Donc lorsque ta requête AJAX sera exécuté tu devrais voir dans la liste "ton_fichier.php" en cliquant dessus tu auras beaucoup d'informations intéressante te permettant de mettre le doigt sur les problèmes que tu rencontres.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [POO] Restaurer un objet JSon en javascript
    Par GandalfZeGrey dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 21/01/2008, 15h14
  2. Lecture d'un objet serial GPS
    Par juminet dans le forum Signal
    Réponses: 2
    Dernier message: 18/12/2007, 17h39
  3. [POO] lecture objet json
    Par taouja dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/12/2007, 11h32
  4. Lecture d'un objet depuis un fichier bloquant
    Par dest dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 11/05/2007, 16h19
  5. Lecture / écriture d'objets sur le disque dur ?
    Par miria.vhg dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/02/2007, 15h21

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