【问题标题】:PHP array to JS array with jQuery and json_encode使用 jQuery 和 json_encode 将 PHP 数组转换为 JS 数组
【发布时间】:2010-07-14 21:19:12
【问题描述】:

我只想将我的 PHP 数组转换为 JS 数组,我在这里做错了什么?

PHP:

// get all the usernames
$login_arr = array();
$sql = "SELECT agent_login FROM agents";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    array_push($login_arr, $row["agent_login"]);
}
$js_login_arr = json_encode($login_arr);
print $js_login_arr; // ["paulyoung","stevefosset","scottvanderlee"] 

JS:

var login_arr = "<?= $js_login_arr; ?>";
alert(login_arr); // acn't even get the string in??
var obj = jQuery.parseJSON(login_arr);

【问题讨论】:

    标签: php jquery arrays json


    【解决方案1】:

    从您的 javascript 中的嵌入式 PHP 中删除引号。该符号是一个数组文字,不需要引用(假设js_login_arr 之后的 PHP 注释是打印到 javascript 中的内容)。

    【讨论】:

    • 好的,谢谢!解析JSON呢?我猜这不是有效的 JSON 对吧?
    • login_arr 不是有效的 JSON - 它已经是一个有效的 Javascript 对象(字符串数组),因此不需要从 JSON 中解析!如果您真的想要(但为什么?!),请为嵌入在您的 JS 中的 PHP 添加引号:&lt;?= '"'.$js_login_arr.'"' ?&gt;,但您还必须在 $js_login_arr 本身内的引号之前加上反斜杠......这很愚蠢。
    【解决方案2】:

    一个简单的方法是通过分隔。拿你的数组(除非你需要字段名,否则不要使用 assoc 数组),将它内爆成一个字符串,由一些不应该使用的字符分隔,比如 % 或其他东西,然后在 JS 中爆炸那个字符,瞧,你有你的阵列。当一个简单的解决方案可以解决问题时,您不需要总是使用 JSON 或 XML 之类的形式。

    【讨论】:

    • 这个建议既脆弱又增加了不必要的字符串处理——“某些字符”很可能出现在您列表的字符串之一中,从而搞砸了爆炸。涉及字符串解析的“简单解决方案”通常是潜在错误所在。另外,既然可以简单地创建数组,为什么还要创建字符串并分解为数组?
    • 哦,真的没有比吗?我不得不说...我的登录名都经过验证,所以我可以安全地使用某个分隔符。数组也相当小(小于 100)
    • 只有在没有好的分隔符选择时才会脆弱。此解决方案中的字符串处理在服务器上进行的工作很少,并且比在输出中构建数组或将其存储在 JSON 或 XML 中使用更少的带宽。您关于分隔符的观点既薄弱又不必要。根据定义,应选择分隔符,使其不包含在数组中的任何字符串中。此外,在我的代码审查中,我发现看似简单的“构造循环”中的潜在错误比在简单而正确的库使用中发现的要多。
    【解决方案3】:

    如果要将 php 数组转换为 JSON,如果 $phpArray 实际上是一个数组,则必须这样做。

     var jsJSON =  echo json_encode($phpArray)
    

    如果你只想回显并转换为 JSON,你必须像字符串一样给它:

     $phpArray = '{'.$key1.':'.$val1','.$key2':'.$val2.'}';
    

    这肯定会奏效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 2011-10-15
      • 1970-01-01
      相关资源
      最近更新 更多