在SQL数据库中存储带有函数的Javascript对象
我正在开发一个javascript菜单(使用jQuery) 作为一个例子,下面是items对象的结构,我将传递给我的自定义函数,该函数随后创建菜单在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: {
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来呈现菜单,那将是一个简单的选择。