Comment puis-je convertir une chaîne en javascript / jQuery en une fonction?
J'essaie d'utiliser une liste de paramètres JSON pour initialiser une fonction. Cependant, l'un des paramètres est une fonction que je stocke comme une chaîne, et je reçois une erreur lorsque j'essaie d'utiliser Eval () pour renvoyer la fonction. P>
Par exemple, si mon JSON est: p> puis dans mon code: p>
6 Réponses :
À la recherche d'un moyen de NON UTILISER EVAL CODE> STROND> C'est le meilleur que je puisse trouver. Utilisez le constructeur de fonction pour créer une fonction
code> à partir d'une chaîne
code>.
var parsed = JSON.parse('{"one":"700", "two":"function(){return 0;}" }');
var func = new Function('return ' + parsed.two)(); // return parsed.two function
alert(typeof func); // function
alert(func()) // 0
Je pense que vous voulez supprimer le commentaire :)
L'objet JSON n'existe pas dans tous les navigateurs. C'est-à-dire 7 ou plus tôt ne l'avez pas
voir cette question à la question . Comme cela a été dit, Json est censé contenir des données. Pour traiter une pièce des données en fonction, vous devez d'abord évaluer la chaîne. P>
Vous êtes évalué une fonction anonyme, ce qui ne sera bien sûr pas appelé par rien. Si vous vouliez vraiment exécuter le code dans le JSON, le texte devrait être Cependant, cela ne sonne pas comme une chose très sensible à faire. Vous seriez meilleur de l'écriture de code pour gérer le contenu de l'objet JSON, plutôt que d'essayer de gérer le code intégré dans le JSON. P> alerte (e) code>. P>
Nith Toi Nith Toi est particulièrement agréable, mais si vous pouvez vous débarrasser de la fonction (E) des bits de wrapper, vous pouvez utiliser var mydynamicfunction = nouvelle fonction ("E" "," Alerte (E); "); Code> Sinon, vous envisagez d'utiliser
eval () code>.
EVAL () CODE> est diabolique en général. Si c'est JSON que vous revenez d'un
$. Getjson code> appel ou quelque chose, vous vous ouvrez aux problèmes de sécurité. P>
Merci - fonctionne bien. Je récupère le Json de JQuery's $ (). Getjson (), qui analyse sans eval.
Merci - ça marche génial. J'ai souvent entendu dire que cet eval est mauvais - mais je ne sais pas vraiment pourquoi. JSON.PARSE () et JQuery's $ .parsejson () Ne semblent pas évaluer la fonction - il semble donc que je dois utiliser eval (). Toutefois, si quelqu'un voulait abuser de cela, ils devraient connaître le paramètre spécifique, car JQuery renvoie un objet analysé à partir d'un appel $ .gejson ().
@Adam: Si vous savez que vous avez un contrôle absolu sur le contenu étant évalué, vous allez bien. C'est juste qu'il exécute une représentation de chaîne de JavaScript que vous le donnez, alors s'il est possible que quelqu'un puisse passer du code malveillant, il ne faut pas être utilisé.
Utilisez ceci:
parameters = eval('(' + json + ')'); $('#myDiv').addThisFeature({ parameter_1: parameters.one, parameter_2: eval('(' + parameters.two + ')') // <= does not generate an error });
Merci - vient de voir ceci ... C'est beaucoup plus propre que de définir une variable séparée pour la fonction.
Merci - je sais que JSON est uniquement des données uniquement ... J'essaie d'initialiser l'objet JQGrid avec une liste de paramètres à changement, et j'utilise occasionnellement un paramètre prend une fonction ... et dans ce cas, comme la fonction elle-même a changé Données internes, il est plus facile de le générer et d'envoyer une chaîne, puis de la définir dans ma bibliothèque et de l'initialiser séparément.