Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL数据库中存储带有函数的Javascript对象_Javascript_Jquery_Sql_Json - Fatal编程技术网

在SQL数据库中存储带有函数的Javascript对象

在SQL数据库中存储带有函数的Javascript对象,javascript,jquery,sql,json,Javascript,Jquery,Sql,Json,我正在开发一个javascript菜单(使用jQuery) 作为一个例子,下面是items对象的结构,我将传递给我的自定义函数,该函数随后创建菜单 var items = { 0: { name: 'file', submenu: { 0: { name: 'open', hasSubitems: true, subitems: {

我正在开发一个javascript菜单(使用jQuery)

作为一个例子,下面是items对象的结构,我将传递给我的自定义函数,该函数随后创建菜单

var items = {
    0: {
        name: 'file',
        submenu: {
            0: {
                name: 'open',
                hasSubitems: true,
                subitems: {
                    0: {
                        name: 'file',
                        hasSubitems: false,
                        callback: function() { alert('you opened a file!'); }
                    },
                    1: {
                        name: 'project'
                        hasSubitems: false,
                        callback: function() { alert('you opened a project!'); }
                    }
                }
            },
            1: {
                name: 'exit',
                hasSubitems: false,
                callback: function() { alert('you logged out!'); }
            }
        }
    },
    1: {
        name: 'edit',
        submenu: {
           ...
        }
    }
}
我希望能够将上述内容存储到数据库中,包括它们的预期回调。我打算创建一个界面来动态构建菜单等等

我意识到我可以创建一个JSON字符串并以这种方式存储它,但是回调函数呢?有人多次建议我不要使用eval,那么人们可以用什么其他方式将此信息安全地存储在数据库中,以便以后调用?

JSON是语言中立的(尽管名称不同),因此它只支持原语值。回调函数是特定于语言的(本例中为javascript),因此它们不能包含在任何需要解释为纯JSON的内容中


我建议您将回调代码从这里拉出来,而是包含必要的参数,以便区分每个回调代码。然后,通过JS模板引擎(如)运行这个JSON对象,并使用助手函数,而不是回调函数。这些参数可以被用来替换JSON对象(现在有效)中的回调函数的参数调用。

尽管我们不知道您需要它做什么,但这仍然是一个非常糟糕的主意。我想我已经解释了它的用途。我想将此菜单存储到数据库中,以便可以动态修改。这并不能解释为什么您不想遵循通常的做法:将数据存储在数据库中,将js存储在
文件中。js
文件使用json2.js并使用JSON.stringify()将其作为字符串存储在数据库中。@PriyankPatel-这对包含回调函数的对象不起作用,因为这些都不是有效的JSON值。所以,基本上,如果我希望单击回调打开一个对话框,我会将“dialog”存储在数据库某处的一个值中,并将该值与正确类型的回调相关联,对吗?我曾设想过这样的解决方案,但我一直很好奇首先将整个对象存储为JSON。不幸的是,您不能将对象存储为JSON,因此如果JSON确实是一种存储需求,最好开始寻找替代方案(如我的建议)。不,它不需要存储在JSON中。这似乎是当时最好的主意。我来看看这一切。我以前从未使用过javascript模板引擎。你为什么推荐它来完成这样的任务?facebook做了类似这样的回调:{'alert':'user sees this'},然后语言会自动解析回调,比如switch语句。我推荐它们是因为它们提供了清晰的关注点分离(可维护和健壮代码的有价值的设计模式)。您将数据存储为纯数据,并使用适当的视图代码(在本例中为JavaScript)委托该数据的呈现。如果有一天你决定用Flash来呈现菜单,那将是一个简单的选择。