【问题标题】:Stored array into Javascript将数组存储到 Javascript 中
【发布时间】:2012-10-09 11:57:59
【问题描述】:

我在 MySql 数据库中存储了一个二维数组

[["c0"]["33925"],["c1"]["39280"],["c2"]["34079"],["c3"]["34091"],["c4"]["34108"]]

我想把它转换成一个 javascript 数组。

我正在使用 php 页面使用 xmlhttp.responseText 获取数组;

它得到了数组,但我不能用它做任何事情;

var layoutArray = new Array();   
layoutArray = xmlhttp.responseText;    
alert(layoutArray[0][0]);

【问题讨论】:

  • 你可以使用eval - 我预测下一个 cmets 可能是“eval is evil!”
  • @Jeff 只要你知道你在做什么,并且没有任何数据曾经来自用户输入,你应该没问题。 (注意强调“ever”)
  • @lc - 这正是我在这种情况下提出 eval 的原因。 :)
  • 为什么要将数组存储为字符串?只需存储一个 JSON 字符串,您不需要 eval() 字符串。
  • eval 是邪恶的 :) 但它唯一的邪恶,如果你不能相信你正在评估的东西。

标签: php javascript mysql arrays


【解决方案1】:

尝试评估数组,因为你得到了一个字符串:

layoutArray = eval(xmlhttp.responseText);

一般来说,您应该避免使用eval,尤其是当您运行eval 的数据来自您的用户时。但是,如果只有你可以篡改这个值,那么eval 是安全的。

【讨论】:

  • 一个好主意是提一下为什么 eval 在这种情况下是安全的 :)
【解决方案2】:

我会将数组存储为像feeela 所说的JSON 字符串。

var layoutArray = {"c0":"33925","c1":"39280","c2":"34079","c3":"34091","c4":"34108"}

for (key in layoutArray){
     console.log(layoutArray[key])
}

【讨论】:

    【解决方案3】:

    在放入数据库之前使用serialize,在提取时使用unserialize。您将拥有 json 结构,而无需在客户端使用 eval。

    【讨论】:

      【解决方案4】:

      如果您使用 PHP 脚本发回结果,并且“必须”将数据存储为数组而不是 JSON,我只需 json_encode 数组并返回:

      Working example

      $array = array("1" => "PHP code tester Sandbox Online",  
                "foo" => "bar", 5 , 5 => 89009, 
                "case" => "Random Stuff");
      
      echo json_encode($array)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-03
        • 2018-03-22
        • 1970-01-01
        • 2016-10-09
        • 1970-01-01
        • 1970-01-01
        • 2019-05-04
        • 1970-01-01
        相关资源
        最近更新 更多