Partage
  • Partager sur Facebook
  • Partager sur Twitter

Remplacer eval par JSON ?

Sujet résolu
    14 mai 2010 à 12:26:46

    Salut !
    J'ai entendu dire que json pouvais remplacer eval.

    Voilà mon code :

    var variableu = 'alert';
    eval(variableu+'();');
    
    /* Allez savoir pourquoi, ça ça ne marche pas :
    window[variableu];
    window[variableu](); */
    


    J'aimerais donc savoir comment faire ça en JSON.

    Une idée ?
    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2010 à 12:32:13

      Voilà le site de json : http://www.json.org/js.html

      Ils expliquent comment ça fonctionne.

      Exemple :
      var myObject = eval('(' + myJSONtext + ')'); // Ancienne méthode
      var myObject = JSON.parse(myJSONtext, reviver); // Nouvelle méthode
      


      Veille à télécharger json2.js pour utiliser ces fonctionnalités.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        14 mai 2010 à 13:33:56

        Sinon dans l'absolu, JSON et eval, rien à voir.

        ton truc pour faire un alert c'est débile et il ne faut pas l'utiliser. Jamais utiliser eval().
        • Partager sur Facebook
        • Partager sur Twitter
          14 mai 2010 à 14:13:48

          Citation

          ton truc pour faire un alert c'est débile et il ne faut pas l'utiliser.



          Bawoui c'est pour ça que j'essaye de le faire partir de mon code....

          @KenTiN10
          Heu... Rien compris. :-°
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            14 mai 2010 à 14:15:11

            c'est quoi qu t'empeche d'utiliser alert() tout court ?
            • Partager sur Facebook
            • Partager sur Twitter
              14 mai 2010 à 14:15:52

              ou au pire, window['alert']()

              Ps: Quand tu dis "ça marche même pas" c'est que alert nécessite au moins 1 argument.
              • Partager sur Facebook
              • Partager sur Twitter
                14 mai 2010 à 14:23:45

                JSON et eval() n'ont rien à voir.

                Simplement, certaines personnes utilisent eval() pour interpréter du JSON sous IE, car les vieilles versions d'IE ne le supportent pas (ce qui est mal, voir le tuto sur les bonnes pratiques). Mais ces deux choses n'ont rien en commun (à part que c'est du JavaScript).

                eval(), tu connais sa fonction, et le JSON est une méthode pour transmettre des trucs à une fonction :

                maFonction({machin: "test", truc: "autre test"});
                
                function maFonction(params)
                {
                    alert(params.machin); // Affiche test
                    alert(params.truc); // Affiche autre test
                }
                
                • Partager sur Facebook
                • Partager sur Twitter
                  14 mai 2010 à 15:23:39

                  Citation : nod_

                  c'est quoi qu t'empeche d'utiliser alert() tout court ?



                  C'était un exemple, dans mon code, la variable est dynamique.

                  Citation : Tiller

                  ou au pire, window['alert']()

                  Ps: Quand tu dis "ça marche même pas" c'est que alert nécessite au moins 1 argument.



                  Ha, c'est une erreur, ça. Car dans mon code la fonction ne demande pas d'argument. ;)

                  @Lineplus

                  Superbe réponse, comme d'hab. Donc JSON ce n'est pas ce qu'il me faut... et ça m'arrange pas. :p
                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 mai 2010 à 15:26:27

                    1. "Car les vieilles versions d'IE ne le supportent pas"
                    Pourquoi ne cracher que sur IE ? Les vieilles versions de firefox ne le supportent pas non plus :-°

                    2. "ces deux choses n'ont rien en commun"
                    Si :o JSON.parse est un "enfant" d'eval, beaucoup plus restrictif, etc.. Mais je suis à peut près sûr que dans le core, la méthode eval est appelé.

                    3. "Le JSON est une métohde pour transmettre des trucs à une fonction"
                    Cay archifaux >_< Le JSON est un format de données / d'écriture basé sur l'écriture Javascript. Les deux caractères spéciaux du JSON sont {} et [], qui correspond aux objets et aux array javascript.


                    @Dedede: Expliques ce que tu veux vraiment faire car là..
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 mai 2010 à 15:28:34

                      Citation : Tiller

                      2. "ces deux choses n'ont rien en commun"
                      Si :o JSON.parse est un "enfant" d'eval, beaucoup plus restrictif, etc.. Mais je suis à peut près sûr que dans le core, la méthode eval est appelé.


                      Je parlais de JSON, pas JSON.parse.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        14 mai 2010 à 16:16:34

                        ok j'ai pigé le truc avec eval et json.

                        window[varDynamique], c'est moche. Utilise un objet :

                        var mesMethodes = {
                          "methode1": function () {},
                          "methode2": function () {}
                        };
                        

                        et pour utiliser le truc :

                        mesMethodes[varDynamique]();
                        


                        window c'est moche parceque implicitement tu trimbales des variables globales.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 mai 2010 à 16:18:45

                          @nod_
                          Merci beaucoup de ta réponse, mais j'ai besoin des variables globales.
                          Et puis je crois voir d'où vient le bug de window.


                          Vous allez rire, mais je crois avoir trouvé d'où vient le bug de ça qui ne marche pas ( depuis le temps :-° )
                          var fonction = 'chocolat'; 
                          fonction chocolat() {
                          
                          }
                          window[fonction](); // -> Trouves pas la fonction.
                          


                          En fait faut prendre un peu de recul dans le code, et ça donne en gros, ça :

                          fonction uneFonction() {
                            var fonction = 'chocolat'; 
                            fonction chocolat() {
                          
                            }
                          window[fonction](); // -> Trouves pas la fonction.
                          }
                          


                          Donc faudrait lui dire :

                          window.uneFonction[fonction](); ou un truc du genre, je n'ai aucune idée de comment lui dire, mais je suis super comptant d'avoir trouvé :-°

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            14 mai 2010 à 16:22:10

                            un truc du genre que je t'ai montré plus haut.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              14 mai 2010 à 17:10:41

                              @Dedede: Ce code marche chez moi hein :

                              function toh() {
                              	alert('.');
                              }
                              var a = 'toh';
                              window[a]();
                              


                              Mais comme a dit no_d, c'est mieux sans globales =°
                              • Partager sur Facebook
                              • Partager sur Twitter
                                14 mai 2010 à 17:14:00

                                Citation : Tiller

                                @Dedede: Ce code marche chez moi hein :

                                function toh() {
                                	alert('.');
                                }
                                var a = 'toh';
                                window[a]();
                                

                                Et ça ?
                                function toh_princip() {
                                 function toh() {
                                	alert('.');
                                 }
                                var a = 'toh';
                                window[a]();
                                }
                                window.onload = toh_princip;
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 mai 2010 à 17:16:53

                                  Non car dans ce cas, toh n'est pas une globale, mais une local de toh_princip.

                                  Si tu veux a tout prix avec window, tu dois transformer ta fonction toh en :

                                  toh = function() { alert('.'); };
                                  


                                  Mais comme a dit nod_, c'est mieux sana globale, en faisant comme son exemple.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    14 mai 2010 à 20:29:43

                                    Merci tout le monde ! La fonction est exécutée ! :D

                                    Mais y'a un petit bug qui traine...

                                    var fonction = 'action_variab';
                                    var choco = 1;
                                    
                                    function action_variab(){
                                    choco = choco +1; // Il ne connait plus cette variable.
                                    }
                                    
                                    var mesMethodes = {
                                      "action_variab": action_variab(),
                                      "action_sauv": action_sauv()
                                    };
                                    mesMethodes[fonction]();
                                    


                                    Une idée ?
                                    Merci !
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      14 mai 2010 à 20:49:17

                                      enlève les parenthèses dans mesMethodes
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        14 mai 2010 à 22:06:54

                                        Merciii nod_ ! :D

                                        Le site rox plus sans eval, c'est incroyable (l).

                                        Bien comptant d'avoir apprit ça ! :D

                                        Merci tout le monde !
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Remplacer eval par JSON ?

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                        • Editeur
                                        • Markdown