如何运行字符串表示的javascript代码?

时间:2011-04-11 16:48:40

标签: javascript javascript-events

Thorugh AJAX我收到包含一些javascript代码的随机字符串(在服务器上的 RUNTIME 构建):

Plugins.add('test', function()
 { 
        return
            {
                html: '<div>test</div>',//EDITED
                width: 200
            }
 });//EDITED

在客户端我希望能够执行此代码。我尝试使用 eval 这样的功能

eval("(" + str + ")");

但我收到错误。我删除了所有“ \ r \ n ”并删除了最后一个“; ”(分号),之后“ eval ”功能成功。但是,如果我在上面的代码中添加一些注释,“ eval ”就会失败。

如何从字符串中运行代码? 谢谢

4 个答案:

答案 0 :(得分:2)

只需删除这些括号:

eval(str);

假设您在问题中输了一个错字,而您的服务器正在对象中发送缺少的结束括号和逗号:

Plugins.add('test', function()
 { 
        return {
                html: '<div>test</div>',  // <-- comma was missing
                width: 200
        };
 }
);   // <-- was missing

请注意,eval()被视为“邪恶”,因为它非常危险。

答案 1 :(得分:0)

您在对象文字中缺少逗号。 Return在它自己的行上只会退出该功能。我假设你想要返回对象。您需要在同一行指定返回值。

Plugins.add('test', function() { 
   var ret =   {
                html: '<div>test</div>',
                width: 200,
            }     
   return ret

 };

答案 2 :(得分:0)

new Function(str)()

或JSON:

new Function('return ' + str)();

如果它恰好满足您的需求,则优于eval。它仍然像eval一样邪恶。

答案 3 :(得分:0)

您可以返回内容类型为"text/javascript""application/x-javascript"的字符串 - 返回值将在返回后立即以JavaScript身份执行。