2010-04-19 18 views
2

JSON est un bon moyen de transmettre des données complexes de mon code côté serveur JavaScript côté client. Par exemple, en PHP, je peux écrire:Est-ce en utilisant des constructions avancées (fonction, les nouveaux, les appels de fonction) en JSON sécurité?

<script type="text/javascript> 
    var MyComplexVariable = <?= BigFancyObjectGraph.GetJSON() ?>; 
    DoMagic(MyComplexVariable); 
</script> 

C'est assez cool, mais parfois vous voulez passer plus de la date de base, comme les dates ou même les définitions de fonction. Il existe un moyen simple et facile de le faire aussi, comme:

<script type="text/javascript> 
    var MyComplexVariable = { 
     'SimpleProperty' : 42, 
     'FunctionProperty' : function() 
     { 
      return 6*7; 
     }, 
     'DateProperty' : new Date(989539200000), 
     'ArbitraryProperty' : GetTheMeaningOfLifeUniverseAndEverything() 
    }; 
    DoMagic(MyComplexVariable); 
</script> 

Et cela fonctionne comme un charme sur tous les navigateurs, je l'ai vu jusqu'à présent. Mais selon JSON.org une telle syntaxe est invalide. D'autre part, j'ai vu cette syntaxe utilisée dans de très nombreux endroits, y compris certains frameworks JavaScript populaires. Alors ...

Puis-je attendre à des problèmes si j'utiliser les fonctions de JSON « non pris en charge » comme celle-ci? Pourquoi est-ce faux ou pas?

précisions Ajouté: Si je pensais mon JSON à consommer par un logiciel 3ème inconnu, ou même un analyseur connu qui n'a pas été un navigateur, alors ces espèces exotiques serait en effet très probablement pas travailler et je ne tenterait pas pour les intégrer. Mais je suis intéressé dans le cas où le code JSON est écrit directement dans un bloc de code JavaScript qui est exécuté par un navigateur Internet. Comme les exemples ci-dessus.

Répondre

2

Selon JSON.org, un objet JSON prend en charge que les membres de la valeur des éléments suivants d'un objet:

alt text http://json.org/value.gif

Étant donné qu'aucun d'entre eux est une fonction, je suggère de ne pas l'utiliser puisque, comme vous dit, il n'est pas officiellement pris en charge dans la spécification.

Par ailleurs, ce qui se passe lorsqu'un client non Javascript (comme un programme Python) tente de consommer votre JSON? Comment va-t-il exécuter votre code JavaScript?

+0

Si je l'ai utilisé seulement pour les données où l'analyseur cible serait très probablement pas un navigateur, alors je suis d'accord avec vous. Mais je pose la question sur le scénario où j'introduis le JavaScript directement dans mon code côté client JavaScript. Il sera exécuté par un navigateur. –