我知道我可以像这样创建一个关联数组:
var MyAssocArray = {'sky':'blue', 'grass':'green'};
而且我非常喜欢使用这种方法。
我想做但遇到麻烦的是:
我有这样保存的字符串:
var MyString = "'sky':'blue', 'grass':'green'";
我希望现在能够做到这一点:
var MyAssocArray = {MyString};
当我尝试这样做时 - 我收到此错误:
invalid object initializer
我做错了什么? 我怎样才能做到这一点?
我找到了一个使用 PHP 和 JavaScript 的不同解决方案。关联数组字符串在 JavaScript 代码中回显:
var Multidimensional_Arr[Multidimensional_Array_Key_Name] = {<?php echo $String_Pulled_From_Database; ?>}; // i.e. 'sky':'blue', 'grass':'green'
// The same can be done for a one-dimensional array
var My_Single_Dime_Arr = {<?php echo $String_Pulled_From_Database; ?>}; // i.e. 'sky':'blue', 'grass':'green'
最佳答案
使用JSON -- 它是序列化的 JavaScript 对象表示法,非常接近您正在做的事情。
你需要做的
var MyAssocArray = JSON.parse(MyString);
此外,JSON 使用双引号,而不是单引号;如果您使用简单的对象,您可能可以编写代码将字符串中的 '
替换为 "
",但如果字符串包含双引号,这将很棘手。
如果您使用的浏览器未实现 JSON.parse(),您可以使用 JSON 网站上的实现(参见 links at bottom of this page),或者如果您使用的是 jQuery,则有 jQuery.parseJSON() .
警告:您的解决方案存在安全风险,除非您确定数据库中的数据已被清理:
var My_Single_Dime_Arr = {<?php echo $String_Pulled_From_Database; ?>}
这相当于调用eval()
;如果您的数据库字符串有任何恶意代码,它可能会做坏事。这就是发明 JSON 的原因之一——在评估之前很容易确保其内容有效(因此安全)。
正如您向我们展示的那样,您的整体架构是[数据库中的数据] -> 服务器端 PHP -> 客户端 JavaScript。这是序列化数据的经典示例。我知道你可能有一些限制来保持你的系统不间断地运行,但严格的序列化格式会让你的系统更安全。
关于JavaScript associativea 数组 - 传递一个字符串作为数组键 : value pairs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577267/