Есть ли способ передать функцию как строку json (преобразование с помощью JSON.stringify), отправить ее другой функции, проанализировать json и затем выполнить функцию, которая была в json? Я использую jquery и javascript.
Pass в json и выполнить
Ответ 1
Здесь рабочий пример
В принципе, вы должны быть осторожны с такими вещами. Если вы используете существующую функцию 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();
});
Ответ 2
Да, вы можете. Есть много способов сделать это.
И нет необходимости использовать "злую" функцию eval (пожалуйста, yahoogle, почему ее следует избегать), как указано здесь: http://javascript.about.com/library/bleval.htm
var tmpFunc = new Function(codeToRun);
tmpFunc();
Независимо от того, был ли JSON на любом этапе, он не имеет значения.
Ответ 3
Да, вы можете преобразовать функцию в строку с помощью метода 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();
Ответ 4
взгляните на плагин JSONfn.
http://www.eslinstructor.net/jsonfn/
он делает именно то, о чем вы просите.
-Vadim
Ответ 5
Я создал вилку JSONfn, которая позволяет вам строгать и анализировать объекты и их прототипы. В моих основных тестах он работал нормально.
Ответ 6
Я считаю полезным использовать функцию JavaScript call() при работе с функциями в файлах JSON.
var returnData = theJsonData.theFunction.call();
console.log(returnData); // prints any return data
Я надеюсь, что это поможет любому, кто заходит!
Ответ 7
//Добавить библиотеку jquery
Нажмите мне
var jsonFun = {
fun1 : function(){
alert('Done');
}
}
$('button').click(function(){
jsonFun.fun1();
});
Это, я думаю, лучший способ передать функцию в JSON
Ответ 8
Нет, вы не можете этого сделать. Функции не могут быть сериализованы JSON. Вместо преобразования объекта в JSON вы можете напрямую передать его другой функции без вызова JSON.stringify.