передать функцию в json и выполнить
есть ли способ передать функцию как строку json (преобразование с помощью JSON.stringify), отправить его в другую функцию, проанализировать json, а затем выполнить функцию, которая была в json? Я использую jQuery и javascript.
7 ответов
вот работает пример
в принципе, вы должны быть осторожны с такого рода вещи. Если вы берете существующую функцию javascript, превращаете ее в строку и оцениваете ее, вы можете столкнуться с проблемами повторного объявления функции. Если вы просто берете строку функции с сервера и хотите ее запустить, вы можете сделать то, что я сделал на этом jsfiddle:
в JavaScript
var myFunc = "function test() {alert('test');}";
$(document).ready(function() {
var data = new Object();
data.func = myFunc;
var jsonVal = $.toJSON(data);
var newObj = $.evalJSON(jsonVal);
eval(newObj.func);
test();
});
Да, вы можете. Есть масса способов сделать это.
и нет необходимости использовать функцию eval" зло " (пожалуйста, yahoogle, почему этого следует избегать), как указано здесь:http://javascript.about.com/library/bleval.htm
var tmpFunc = new Function(codeToRun);
tmpFunc();
был ли это JSON на любом этапе, не имеет значения.
Да, вы можете преобразовать функцию в строку с toString()
метод.
вот пример чтобы показать преобразование функции в строку и обратно в функцию:
var myfunc = function () {
alert('It works!');
}
var as_string = myfunc.toString();
as_string = as_string.replace('It works', 'It really works');
var as_func = eval('(' + as_string + ')');
as_func();
Я создал вилку JSONfn, которая позволяет вам stringify и анализировать объекты и их прототипы. В моих базовых тестах это работало нормально.
/ / добавить библиотеку jquery
нажми на меня
var jsonFun = {
fun1 : function(){
alert('Done');
}
}
$('button').click(function(){
jsonFun.fun1();
});
Это, я думаю, лучший способ передать функцию в json
нет, вы не можете этого сделать. Функции не могут быть сериализованы в JSON. Вместо преобразования объекта в JSON вы можете напрямую передать его другой функции без вызова JSON.преобразовать в строки.