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 :

Récupérer résultat d'un json_encode($array()) [AJAX]


Sujet :

jQuery

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut Récupérer résultat d'un json_encode($array())
    Bonjour,

    j'alimente un tableau en PHP que je souhaite utiliser dans mon code jquery.
    c'est un tableau à plusieurs dimensions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var mailBody='<?php echo json_encode($corpsMail, JSON_FORCE_OBJECT) ?>';
    mailBody contient une chaîne de caractère avec les bonnes données qui semblent valides, tout du moins d'après https://jsonlint.com/ :

    voici un bout de cette chaine de caractère :
    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
    27
    28
    29
    30
    "trMouv1": {
    		"DATE EMBAUCHE OU RENOUVELLEMENT": "26/06/2019",
    		"DATE DE FIN": "26/09/2019",
    		"MATRICULE RH": "16777214",
    		"TYPOLOGIE DE CONTRAT": "RÉEMBAUCHE CDI",
    		"MOTIF": "SURNU",
    		"NOM": "DUPONT",
    		"PRENOM": "DUPONT",
    		"SITE": "APE AGEN",
    		"SERVICE (À RENSEIGNER SI DR)": "CABINET DIRECTION",
    		"N+1": "DUPONT DUPONT",
    		"CODE EMPLOI": "E005 - C R S I",
    		"COEFF": "500",
    		"QUOTITE": "100"
    	},
    	"trMouv3": {
    		"DATE EMBAUCHE OU RENOUVELLEMENT": "22/07/2019",
    		"DATE DE FIN": "27/08/2019",
    		"MATRICULE RH": "16777215",
    		"TYPOLOGIE DE CONTRAT": "EMBAUCHE",
    		"MOTIF": "SURNU",
    		"NOM": "MARTIN",
    		"PRENOM": "MARTIN",
    		"SITE": "APE LIMOGES",
    		"SERVICE (À RENSEIGNER SI DR)": "SERVICE SYSTÈME INFORMATIQUE ET TÉLÉPHONIE RÉGIONALE",
    		"N+1": "DUPONT DUPONT",
    		"CODE EMPLOI": "E005 - C R S I",
    		"COEFF": "500",
    		"QUOTITE": "100"
    	}
    En revanche, je n'arrive pas à exploité ce résultat dans mon script jquery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    var mailBody='<?php echo json_encode($corpsMail, JSON_FORCE_OBJECT) ?>';
    var errorJson ='<?php echo json_last_error()?>';
    console.log(errorJson); //retourne 0
    console.log(typeof mailBody); //retourne 'string'
     
    console.log(mailBody); //retourne chaine de cartère ci-dessus
    console.log(mailBody[0]); //retourne {
    console.log(mailBody[0]['trMouv3']); //retourne undefined
    console.log(mailBody[0]['trMouv3']['NOM']); //génère une erreur  'can not read property 'NOM'  of undefined' (fallait s'y attendre)
    console.log(mailBody['trMouv3']); //retourne undefined
    console.log(mailBody['trMouv3']['NOM']);//génère une erreur  'can not read property 'NOM'  of undefined' (fallait s'y attendre)
    Mon objectif :
    J'ai un datatable avec en première colonne un pictogramme (une enveloppe) et je souhaite que lorsque l'utilisateur clique dessus, celà génère un mail avec certaines données de la ligne selectionnée.
    C'est données sont identifiées dans ma base et je les stock coté php dans la variable $corpsmail

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      while ($arrayMvt=mysqli_fetch_array($sqlMvt, MYSQLI_ASSOC)){
         while ($arrayContenuOnglet=mysqli_fetch_array($sqlContenuOnglet, MYSQLI_ASSOC)){
            $champ=$arrayContenuOnglet['nomChamp'];
            $valchamp=mb_strtoupper($arrayMvt[$champ]);
     
            if($arrayContenuOnglet['mail']==1){
                $corpsMail["trMouv".$arrayMvt['id']][$arrayContenuOnglet['traduction']]=$valchamp;
            }
          }
      }
    et sur le clique j'appelle la fonction suivante :


    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
    27
     
    function sendMail(trId){
      //alert(trId);
     
    var mailBody='<?php echo json_encode($corpsMail, JSON_FORCE_OBJECT) ?>';
    var errorJson ='<?php echo json_last_error()?>';
     
    var mailSubject=mailBody[trId]['SITE'] + ' - ' +mailBody[trId]['TYPOLOGIE DE CONTRAT'] + ' - ' +  mailBody[trId]['NOM'] + ' '+ mailBody[trId]['PRENOM'] +  ' - ' +mailBody[trId]['DATE EMBAUCHE OU RENOUVELLEMENT'];
     
     var mailDest='<?=implode(";", $listDiff)?>'; //$listDiff est un tableau php qui contient une liste d'adresse mail, mail dest prend bien la liste des @ séparées par un point virgule
     
     
    //là je souhaiterai incrémenter une variable avec tous les éléments du tableau $corpsMail avec la clé et séparé par un retour à la ligne.
    //ex:
    //"DATE EMBAUCHE OU RENOUVELLEMENT": "22/07/2019",
    //"DATE DE FIN": "27/08/2019",
    //"MATRICULE RH": "16777215",
    //"TYPOLOGIE DE CONTRAT": "EMBAUCHE",
    //"MOTIF": "SURNU",
    //"NOM": "MARTIN",
    //"PRENOM": "MARTIN",
    //"SITE": "APE LIMOGES", 
    //etc...
     
     window.location = 'mailto:' + mailDest + '?subject=' + mailSubject + '&body=' +   mailBody ;
     
    }
    Merci de votre aide
    La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
    Baudelaire

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je n'ai pas tout lu...

    Par contre, Charles Baudelaire se trompe (ta signature) :
    "La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas."
    En vérité :
    "La plus grande ruse du diable est de faire croire à tout le monde qu'il EXISTE.
    Alors qu'en réalité, c'est l'Homme qui EST le diable."
    A méditer... (ou pas)

  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    Citation Envoyé par mohcultiv Voir le message
    ...qui semblent valides, tout du moins d'après https://jsonlint.com/
    Je ne pense pas, parce qu'ils manquent les accolades de début et de fin.

    Un json valide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {
         "trMouv1": {...},
         "trMouv3": {...}
    }
    Après il faut le parser avec $.parseJSON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var mailBody=$.parseJSON('<?php echo json_encode($corpsMail, JSON_FORCE_OBJECT); ?>');
    console.log("Mouv1 :",mailBody.trMouv1);//affiche l'objet "trMouv1"
    Ou bien combiner $.parseJSON avec JSON.stringify() mais cette fois il ne faut pas mettre les quottes ' ' autour de <?php ?> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var mailBody=$.parseJSON( JSON.stringify( <?php echo json_encode($corpsMail, JSON_FORCE_OBJECT); ?> ) );
    Et au lieu de typeof mailBody, en jQuery c'est $.type(mailBody)
    Pour parcourir cet objet, tu peux utiliser $.each :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $.each(mailBody,function(trMouv,mouv){
    	console.log("tr Mouv :"+trMouv
                          +", NOM :"+mouv.NOM
                           +", Prenom :"+mouv.PRENOM
                           +", TYPOLOGIE CONTRAT :"+mouv["TYPOLOGIE DE CONTRAT"]//ici il faut les crochets [], parce qu'il y a des espaces dans la clé "TYPOLOGIE DE CONTRAT"
            );
    });
    De la part d'un Diable qui code.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Je n'ai pas tout lu...

    Par contre, Charles Baudelaire se trompe (ta signature) :

    En vérité :


    A méditer... (ou pas)

    En vérité,c'est plus Keyzer Soze dans Usual Suspect qui m'a inspiré pour cette citation que Baudelaire, mais il faut rendre a César ce qui appartient à César

    Merci Toufik,

    avec le parseJsonça fonctionne beaucoup mieux.

    Encore merci
    La plus grande ruse du diable est de faire croire à tout le monde qu'il n'existe pas.
    Baudelaire

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

Discussions similaires

  1. Récupérer résultat d'une rotation
    Par Burckel dans le forum OpenGL
    Réponses: 5
    Dernier message: 14/12/2006, 17h08
  2. Réponses: 2
    Dernier message: 03/05/2006, 08h22
  3. [VBA-E] Récupérer résultat d'une requête
    Par ragnarök dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2006, 16h21
  4. [MySQL] récupérer plusieurs tuples depuis un array
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 29/12/2005, 18h17
  5. Réponses: 5
    Dernier message: 30/06/2005, 10h28

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