Thorugh AJAX我收到包含一些javascript代码的随机字符串(在服务器上的 RUNTIME 构建):
Plugins.add('test', function()
{
return
{
html: '<div>test</div>',//EDITED
width: 200
}
});//EDITED
在客户端我希望能够执行此代码。我尝试使用 eval 这样的功能
eval("(" + str + ")");
但我收到错误。我删除了所有“ \ r \ n ”并删除了最后一个“; ”(分号),之后“ eval ”功能成功。但是,如果我在上面的代码中添加一些注释,“ eval ”就会失败。
如何从字符串中运行代码? 谢谢
答案 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身份执行。