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

JavaScript Discussion :

JavaScript et json_encode


Sujet :

JavaScript

  1. #1
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut JavaScript et json_encode
    Bonjour,

    Dans une liste <select>, depuis onchange="", j'exécute la fonction test();
    afin de remplir une seconde liste select.

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <select id="mylist1" onchange="test('<?php echo json_encode($class->scriptData); ?>', 'mylist1', 'mylist2');"></select> <select id="mylist2""></select>

    Dans le fichier 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
    function test(data, listA, listB){
    var scriptData = data;
     
    //alert(scriptData.element1); // valeur numérique max
     
    select = document.getElementById(listB);
    var max = scriptData.element1;
     
    for (var i = 1; i<= max; i++) {
     
        var opt = document.createElement('option');
        opt.value = i;
        opt.innerHTML = i;
        select.appendChild(opt);
    }
    }
    Ce code devrait fonctionner mais je tourne en rond depuis 1h.. le but est d'éviter ce genre de déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript">
      scriptData = <?php echo json_encode($class->scriptData); ?>;
    </script>
    En fait, celui-ci fonctionne déjà ainsi mais je voudrais déclarer la variable scriptData directement dans la fonction test() et non à l'extérieure.

    Vous remerciant par avance pour votre réponse,

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Le code JS fonctionne dans mon test :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select id="mylist1"></select>
    <select id="mylist2"></select>

    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
    function test( data, listA, listB ){
    	var scriptData = data;
     
    	console.log( scriptData.element1 ); // valeur numérique max
     
    	var select = document.getElementById(listB);
    	var max = scriptData.element1;
     
    	for ( var i = 1; i <= max; i++) {
    		var opt = document.createElement( 'option' );
    		opt.value = i;
    		opt.innerHTML = i;
    		select.appendChild(opt);
    	}
    }
     
    test( { "element1" : 10 }, "mylist1", "mylist2" );

    L'erreur est sans doute dans le contenu de data, que donne un console.log( data );

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Merci pour votre réponse,

    En fait tout fonctionne, c'est juste quand je remplace la déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript">
      scriptData = <?php echo json_encode($class->scriptData); ?>;
    </script>
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function test( data, listA, listB ){
    	var scriptData = data; ...
    
    <select id="mylist1" onchange="test('<?php echo json_encode($class->scriptData); ?>', 'mylist1', 'mylist2');"></select>
    Qu'est-ce que vous avez mis dans le onchange ?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    regardez le code HTML généré dans les 2 cas. vous verrez que dans le 2nd cas, vous créez une chaine de caractères au lieu d'un objet JSON

  5. #5
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Avez vous une solution à cela svp?

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    <select id="mylist1" onchange="test(' " + <?php echo json_encode($class->scriptData); ?> + " ', 'mylist1', 'mylist2');"></select>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Bonjour,

    ne fonctionne pas non plus, j'ai aussi essayé ceci;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onchange="test(' + <?php echo json_encode($class->json_data); ?> + ', 'liste1', 'liste2'....

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    les guillemets simples ou doubles créent une chaine de caractère donc pour avoir un objet JSON, essayez sans ces guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onchange="test(<?php echo json_encode($class->json_data);?>, 'liste1', 'liste2'....

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

Discussions similaires

  1. Les meilleurs livres pour apprendre le JavaScript
    Par vermine dans le forum Livres
    Réponses: 23
    Dernier message: 10/06/2019, 18h58
  2. Réponses: 13
    Dernier message: 13/12/2013, 11h41
  3. JavaScript<---->ActionScript
    Par crazypiou dans le forum Flash
    Réponses: 21
    Dernier message: 17/04/2009, 17h14
  4. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 06/05/2003, 14h24
  5. JavaScript de vérification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/02/2003, 13h48

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