在json中传递函数并执行

ama*_*eur 32 javascript jquery json observer-pattern

有没有办法可以将函数作为json字符串传递(使用JSON.stringify进行转换),将其发送到另一个函数,解析json然后执行json中的函数?我正在使用jquery和javascript.

Eas*_*one 51

是的你可以.有很多方法可以做到这一点.

并且没有必要使用"邪恶"评估函数(请yahoogle为什么应该避免它),如下所示:http://javascript.about.com/library/bleval.htm

var tmpFunc = new Function(codeToRun);
tmpFunc(); 
Run Code Online (Sandbox Code Playgroud)

无论是JSON在任何阶段都应该是无关紧要的.

  • +1为"yahoogle".虽然Bing现在不比雅虎更受欢迎吗?那会是"叮当作响"吗?或者更长的一句话Scott Hanselman在演讲中使用了"Google on Bing"? (10认同)
  • YabingleYabingleGo (3认同)
  • 我更喜欢"boogle":) (2认同)

tre*_*ace 21

这是一个有效的例子

基本上,你必须小心这种事情.如果您使用现有的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();
});?
Run Code Online (Sandbox Code Playgroud)


Ski*_*ick 19

是的,您可以使用它的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();
Run Code Online (Sandbox Code Playgroud)

  • 为什么 eval 里面多了一组 () ? (2认同)

vad*_*imk 5

看看JSONfn插件。

http://www.eslinstructor.net/jsonfn/

它完全符合您的要求。

-瓦迪姆