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 :

Data retour avec JSON


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Par défaut Data retour avec JSON
    Bonjour,

    j'ai récupérer un petit code basé sur Jquery pour faire des appels AJAX, ça fait très bien ce dont j'ai besoin lorsque je n'ai besoin que de deux valeur (index + valeur par exemple), mais dès que j'en veut plus, ça ne marche pas, je n'arrive pas à modifier le code. N'étant pas codeur à la base, je viens ici chercher quelques explications.

    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
    26
    var $mdph = $('#id_notif_mdph');
    var $type_notif_mdph = $('#type_notif_mdph');
     
    $mdph.on('change', function() {
    	var val = $(this).val(); 
    	if(val != '') {
    		$type_notif_mdph.empty(); 
    		$.ajax({
    			url: 'fonction/mdph.php',
    			type: 'GET',
    			data: 'id_mdph='+ val, 
    			dataType: 'json',
    			success: function(json4) {
    				$.each(json4, function(index, value) {
    					$type_notif_mdph.append('<option value="'+ index +'">'+ value +'</option>');
    					$type_notif_mdph.on('change', function() {
    						//var val = $(this).val();
    						//$('#rne_etab').val(val);
    						//$('#rne_etab').change();	
    									});	
    					$type_notif_mdph.change();	
    				});
    			}
    		});				
    	}
    });
    Mon fichier mdph.php
    Code php : 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
    27
    28
    29
    30
    31
    <?php
    if(isset($_GET['go']) || isset($_GET['id_mdph'])) {
     
        $json = array();
     
        if(isset($_GET['go'])) {
            //si j'ai besoin
        } else if(isset($_GET['id_mdph'])) {
     
            // requête qui récupère la liste des notif mdph
            $requete = "SELECT * FROM notification_mdph WHERE  id_notif_mdph = '".$_GET['id_mdph']."' ORDER BY  id_notif_mdph";    }
     
        // connexion à la base de données
        try {
            $bdd = new PDO('mysql:host=localhost;dbname=gaela', 'root', 'xx');
        } catch(Exception $e) {
            exit('Impossible de se connecter à la base de données.');
        }
        // exécution de la requête
        $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
     
        // résultats
        while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
            // je remplis un tableau et mettant l'id en index
            $json4[$donnees[' id_notif_mdph']][] = utf8_encode($donnees['type_notif_mdph']);
        }
     
        // envoi du résultat au success
        echo json_encode($json4);
    }
    ?>

    Je ne comprends pas cette partie :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
            // je remplis un tableau et mettant l'id en index
            $json4[$donnees[' id_notif_mdph']][] = utf8_encode($donnees['type_notif_mdph']);
    }
    Ok pour le while, mais pour le reste ??? Si je veux rajouter une données en plus comme : [$donnees['date_notif_mdph']], je fais comment ?
    Suis-je limité à un index + une valeur ?

    Merci beaucoup pour votre aide.

  2. #2
    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
    La partie que tu ne comprends pas me semble comporter une erreur. Une variable y est nommé $json4 alors quelle est déclaré plus haut comme $json = array().

    Bref si on décompose pour chaque fetch du résultat de ta requête tu récupère un tableau $donnees qui contient au moins les informations suivantes:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($donnees); // array(2) { ["id_notif_mdph"]=> int(0) ["type_notif_mdph"]=> string(4) "test" }

    Dans ton tableau $json4 ou $json on va simplement ajouter dynamiquement un index qui sera égale à $donnees['id_notif_mdph'] puis dynamiquement nous implémentons un tableau comme valeur qui va prendre l'encodage UTF-8 de la valeur de $donnees['id_notif_mdph'].

    Pour avoir un résultat ressemblant à N fois ceci:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($json4); // array(1) { [0]=> array(1) { [0]=> string(4) "test" } }

    Pour répondre à la suite du problème non tu n'est pas limité on pourrais imaginer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
            // je remplis un tableau et mettant l'id en index
            $json4[$donnees[' id_notif_mdph']] = array('type_notif_mdph' => $donnees['type_notif_mdph'], 'date_notif_mdph' => $donnees['date_notif_mdph']);
            // array(1) { [0]=> array(1) { ['type_notif_mdph']=> string(4) "test", ['date_notif_mdph']=> string(10) "03/03/2015" } }
    }
    N'oublie pas d'encoder chaque valeur afin d'éviter tout problème avec json_encode et c'est bon

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Par défaut
    Merci pour la réponse.
    J'ai surtout un problème avec la syntaxe. Dans mon cas, ça ferait un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $json4[$donnees[' id_notif_mdph']][utf8_encode($donnees['type_notif_mdph']),utf8_encode($donnees['date_notif_mdph']];
    ou comme ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $json4[$donnees[' id_notif_mdph']][] = utf8_encode($donnees['type_notif_mdph']), utf8_encode($donnees['date_notif_mdph']];

  4. #4
    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
    Ni l'une ni l'autre malheureusement.

    Déjà utf8_encode est une fonction permettant d'encoder une chaîne de caractère en UTF-8 si elle ne l'est pas déjà, uniquement pour s'assurer que la fonction json_encode fonctionne correctement.

    Je partage ci-dessous une fonction qui me sert sur un projet qui a été créer avec un encodage iso-8859-1 et qui pose problème a chaque fois que je souhaite faire un json_encode:

    Code PHP : 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
    27
    28
    29
     
    /**
     * Permet l'encodage ou le décodage d'une chaîne de caractère ou d'un tableau.
     *
     * @param mixed [$var] une chaîne de caractère ou un tableau à encoder ou décoder.
     * @param string [$mode] une chaîne de caractère représentant les fonctions `utf8_encode` & `utf8_decode`.
     * @return mixed retourne [$var] traité ou non.
     */
    function arrToUtf8 ($var, $mode = 'utf8_encode') {
    	if (!is_string($mode) && !in_array($mode, array('utf8_encode', 'utf8_decode'))) {
    		return $var;
    	}
     
    	if (is_string($var)) {
    		return $mode($var);
    	}
     
    	if (is_array($var)) {
    		$newVar = array();
     
    		foreach ($var as $key => $value) {
    			$newVar[$mode($key)] = is_array($value) ? arrToUtf8($value, $mode) : $mode($value);
    		}
     
    		return $newVar;
    	}
     
    	return $var;
    }

    Elle permet d'agir directement sur un tableau et occasionnellement dans les deux sens. Ainsi tu n'as qu'a reprendre ce que j'ai écris:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
            // je remplis un tableau et mettant l'id en index
            $json4[$donnees[' id_notif_mdph']] = array('type_notif_mdph' => $donnees['type_notif_mdph'], 'date_notif_mdph' => $donnees['date_notif_mdph']);
            // array(1) { [0]=> array(1) { ['type_notif_mdph']=> string(4) "test", ['date_notif_mdph']=> string(10) "03/03/2015" } }
    }
     
    var_dump($json4); // Afin de bien vérifier si les données semblent correctes
     
    echo json_encode(arrToUtf8($json4)); // On encode en UTF-8 chaque valeurs du tableau $json4 afin d'éviter les erreurs pour l'encodage json.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 52
    Par défaut
    Merci pour la fonction, ça va être bien pratique.
    Je comprends mieux la notation avec array et parenthèse que crochet, c'est plus clair.

    Sur le principe, je comprends ce que je vais recevoir, mais comment l'afficher ?

    Avec ça, ça marchait temps que j'avais que deux données ... Mais là, ça ne marche plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    success: function(json4) {
    	$.each(json4, function(index, value) {
    		$type_notif_mdph.append('<option value="'+ index +'">'+ value +'</option>');
    		$type_notif_mdph.change();	
    	});
    }
    En lisant l'aide de cette page, j'ai l'impression que $.each ne permet qu'un index + un élément ...
    http://www.w3schools.com/jquery/misc_each.asp

  6. #6
    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
    Le each de jquery est simplement une boucle for qui permet d'appliquer une fonction sur chaque élément de l'objet qui lui est passé.

    ici un petit exemple pour ton cas d'utilisation de ce qui se passe: http://jsfiddle.net/91vxwnkn/2/

    Pour faire court, en JS il te suffit largement de connaître la structure de tes données pour arriver a créer des fonctionnalités ou même des applications facilement. Je ne dis pas qu'il ne faut connaître que ça mais ça te permet d'apprendre tous les autres rouages derrières.

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par défaut
    Bonjur,
    En lisant l'aide de cette page, j'ai l'impression que $.each ne permet qu'un index + un élément ...
    http://www.w3schools.com/jquery/misc_each.asp
    pourquoi diable ne pas lire la documentation officielle ?
    jQuery.each()

Discussions similaires

  1. Retour inexistant avec json
    Par yann18 dans le forum jQuery
    Réponses: 2
    Dernier message: 03/11/2011, 14h04
  2. Ajax avec jQuery: envoi par POST retour en JSON
    Par band22 dans le forum jQuery
    Réponses: 1
    Dernier message: 14/10/2011, 10h54
  3. Remplir objet avec retour objet json
    Par steve3000 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/06/2009, 12h03
  4. Message:" System .data.datatablecollection" avec datarow
    Par andres007 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 26/02/2007, 22h50
  5. appel sous-formulaire et retour avec ecran normal
    Par pat1545 dans le forum Access
    Réponses: 1
    Dernier message: 31/07/2006, 19h18

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