Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Prototype & Script.aculo.us
Prototype & Script.aculo.us Forum d'entraide sur les frameworks Prototype et Script.aculo.us
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/09/2007, 20h54   #1
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Par défaut [DOM] Prototype 1.5.1 et evalJSON()

Bonjour,

J'ai essayé de réaliser l'exemple tout simple "Parsing JSON" qui se trouve à cette adresse: http://www.prototypejs.org/learn/json. J'ai implémenter ça de manière très simple voici le code ci-dessous:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
<html>
    <head>
        <title>Test JSON</title>
        <script language="Javascript" type="text/javascript" src="prototype.js"></script>
    </head>
    <body>
        <script type="text/javascript" language="Javascript">
            var data = '{ "name": "Violet", "occupation": "character" }'.evalJSON();
            alert(data.name);
        </script>
    </body>
</html>
Cependant sa ne marche pas! Aucune alert!
Si quelqu'un pouvait m'expliquer ce que je fais faux...

Merci d'avance.
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2007, 22h19   #2
Expert Confirmé Sénior
 
Avatar de denisC
 
Inscription : février 2005
Messages : 4 069
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2005
Messages : 4 069
Points : 4 698
Points : 4 698
Citation:
Envoyé par Yoteco Voir le message
Cependant sa ne marche pas! Aucune alert!
Si quelqu'un pouvait m'expliquer ce que je fais faux...
La syntaxe a l'air correcte. Essaye de lancer ton script après le chargement de la page (sur le onload ou avec un bouton et un onclick).
denisC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 08h39   #3
Membre éclairé
 
Inscription : novembre 2006
Messages : 336
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 336
Points : 323
Points : 323
Citation:
Envoyé par denisC Voir le message
La syntaxe a l'air correcte. Essaye de lancer ton script après le chargement de la page (sur le onload ou avec un bouton et un onclick).
Ca n'a rien a voir avec la construction du DOM.
Le script fonctionne parfaitemenent de toute façon, tu dois avoir un autre soucis
Shinuza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 09h56   #4
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Citation:
Envoyé par Shinuza Voir le message
Ca n'a rien a voir avec la construction du DOM.
Le script fonctionne parfaitemenent de toute façon, tu dois avoir un autre soucis
Pas très constructif mais merci quand même...

J'ai suivis les indications de denisC j'ai donc fais un bouton qui appelle le script lorsqu'on clique dessus. Mais sa ne marche toujours pas. FireBug me retourne l'erreur suivante:
Citation:
"{ \"name\": \"Violet\", \"occupation\": \"character\" }".evalJSON is not a function
Et voici mon code avec le bouton:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
    <head>
        <title>Test JSON</title>
        <script language="Javascript" type="text/javascript" src="prototype.js"></script>
    </head>
    <body>
        <script type="text/javascript" language="Javascript">
            function json()
            {
                var data = '{ "name": "Violet", "occupation": "character" }'.evalJSON();
                alert(data.name);
            }
        </script>
        <input type="button" onclick="json();"/>
    </body>
</html>
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 13h53   #5
Membre éclairé
 
Inscription : novembre 2006
Messages : 336
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 336
Points : 323
Points : 323


Je dis ça parce que je l'ai testé (ton code mot pour mot + plus la release actuelle de Proto)

J'ai même essayé d'executer le code suivant sur le site de Prototype
Code :
1
2
3
4
(function () {
                var data = '{ "name": "Violet", "occupation": "character" }'.evalJSON();
                alert(data.name);
})()
Et ça fonctionne parfaitement.

Essaye de faire
Code :
console.dir(String.prototype)
Pour voir si evalJSON apparait :
-Si ce n'est pas le cas, mais que tu as des méthodes etendues, verifie ta version de protoype
-Si tu n'as pas de méthodes étendues, prototype n'est pas correctement appelé (vérifie que le code apparait quand tu cliques sur l'onglet Script de firebug et que tu selectionnes prototype.js)
Shinuza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 16h15   #6
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Mea Culpa !!! J'avais la version 1.5.0 de prototype et non pas la 1.5.1. Désolé
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 20h52   #7
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
Désolé mais evalJSON, c'est stupide comme fonction vu que JavaScript l'implémente déjà !

Suffit de faire eval('tachaine');
__________________
Fremy
Pour vos développements Web et une navigation agréable, le tout gratuit :
1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 21h31   #8
Expert Confirmé Sénior
 
Avatar de denisC
 
Inscription : février 2005
Messages : 4 069
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2005
Messages : 4 069
Points : 4 698
Points : 4 698
Citation:
Envoyé par FremyCompany Voir le message
Désolé mais evalJSON, c'est stupide comme fonction vu que JavaScript l'implémente déjà !

Suffit de faire eval('tachaine');
@Fremy : En vrac, evalJSON permet ou non d'evaluer les méthodes presentes dans le code, permet l'utilisation de JSON 'sécurisé', etc....

eval(), c'est un peu risqué quand même.... En plus, evalJSON devient une ;éthode de string, ce qui est quand même assez élégant
denisC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2007, 17h27   #9
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
Ah bon ? Et comment ils ont fait pour "sécuriser" eval ?

Là j'avoue je vois pas...

De plus, il ne faut pas oublier que tout travail sur une chaine de caractère en JavaScript est très couteux en temps processeur. Si on sait d'où viennent les données, inutile de casser la tête...
__________________
Fremy
Pour vos développements Web et une navigation agréable, le tout gratuit :
1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 12h20   #10
Membre éclairé
 
Inscription : novembre 2006
Messages : 336
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 336
Points : 323
Points : 323
Citation:
Envoyé par FremyCompany Voir le message
Ah bon ? Et comment ils ont fait pour "sécuriser" eval ?

Là j'avoue je vois pas...

De plus, il ne faut pas oublier que tout travail sur une chaine de caractère en JavaScript est très couteux en temps processeur. Si on sait d'où viennent les données, inutile de casser la tête...
Il vérifie la présence de fonctions dans les données (json étant un format de données il n'est pas censé contenir de code executable). Cependant, si on est sur de la provenance des données on peut faire un simple

Code :
eval("(" + data + ")");
suffirat
Shinuza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 17h20   #11
Expert Confirmé Sénior
 
Avatar de denisC
 
Inscription : février 2005
Messages : 4 069
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2005
Messages : 4 069
Points : 4 698
Points : 4 698
Citation:
Envoyé par FremyCompany Voir le message
Ah bon ? Et comment ils ont fait pour "sécuriser" eval ?
Cf : http://www.fortifysoftware.com/servl..._Hijacking.pdf

L'idée c'est de rajouter des choses qu'on peut enlever lors du traitement de la requete avec XHR, ce qu'on ne peut pas faire avec une balise script, ce qui evite le cross-domain JSON.
denisC est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h54.


 
 
 
 
Partenaires

Hébergement Web