如何避免在JSON脚本上使用eval?

时间:2012-08-01 10:42:52

标签: javascript jquery json eval

我的网络应用程序(运行jQuery)从服务器获取以下JSON响应:

{
    "script_0": "$('#objview_0_306').on('click', function(e){ getObjectResponse(96089, '306', 'display'); e.preventDefault();});",    
    "verb_0": "display",
    "obid_0": "0_306",
    "body_0": "<div id=\"objview_0_306\"></div>",
    "icon_0": "icons/caseman16.png",
    "close_0": "previousTab();",
    "title_0": "Cases",
    "cmdCount": "1"
}

script_0元素包含必须运行的脚本,在这种情况下,将onClick事件添加到DOM元素。

目前,我使用eval()来运行脚本,因为它们作为字符串返回。有没有办法避免使用eval()?

4 个答案:

答案 0 :(得分:1)

NOOP。 eval(和别名Function构造函数等)旨在完成此操作,将字符串解析为runnable javascript。

如果您不想使用eval,而不是从服务器返回完整的javascript,您可以返回json响应中的值,指示您的客户端应用程序执行预定义的任务。

我要抄袭@Esailija的评论: 为什么你会在json中有代码?这是一种数据交换格式......

答案 1 :(得分:0)

如果没有eval或其衍生产品,我认为您无法实现您的目标。

您可以查看jQuery.globalEval()方法,如下所述:http://api.jquery.com/jQuery.globalEval/

您还可以查看jQuery.getScript()方法:http://api.jquery.com/jQuery.getScript/

答案 2 :(得分:0)

我会是第一个滔滔不绝的eval == evil口头禅,但我也是一个现实主义者,有时可以打破规则。

我想你可能在这里有一个。

答案 3 :(得分:0)

您可以尝试将带有代码的字符串附加到DOM,然后在所需元素上触发click事件。