【问题标题】:Javascript: Building an array with a variableJavascript:使用变量构建数组
【发布时间】:2010-10-27 10:09:22
【问题描述】:

是否可以像这样获取变量的内容并将其粘贴到数组中(我试过无济于事):

首先我从数据库中获取这些值,并使用 php 表单将这些值放入隐藏的输入中:

{value: '1', name: 'name1'},{value: '2', name: 'name2'}

然后用javascript收集

document.getElementById("myelement").value

然后放值

var meval = document.getElementById("myelement").value;

然后我尝试像这样构建数据:

var data = {items: [meval]};

如果我这样做

var data = {items: [{value: '1', name: 'name1'},{value: '2', name: 'name2'}]};

它可以工作,但不是变量的初始方式。而且我必须像这样构建原始数据。

【问题讨论】:

  • 如何在服务器端生成字符串 ("{value: '1', name: 'name1'},{value: '2', name: 'name2'}")?你在用 PHP 的 json_encode() 吗?

标签: javascript arrays variables multidimensional-array


【解决方案1】:

eval() 是邪恶的!请改用JSON.parse()

var data = {items: JSON.parse('['+meval+']')};

如果您的网站中包含 jQuery,您可以使用 $.parseJSON(),这在旧版浏览器上效果更好。

【讨论】:

  • @play:那是因为你的 json 格式不正确。你应该从你的数据库中输出这个:{"value": "1", "name": "name1"},{"value": "2", "name": "name2"}。 PHP 的 json_encode() 会做到这一点。
  • @play:让我重复一遍:那是因为你的 json 格式不正确。再说一遍:您的 JSON 格式错误。你应该从你的数据库中输出这个:{"value": "1", "name": "name1"},{"value": "2", "name": "name2"}.
  • 我在刷新页面之前发布了评论,所以我没有看到您的评论。谢谢你的帮助。很抱歉混淆了。我现在试过了,它给了我一个“意外的输入结束”错误
  • 那你忘了关闭括号/引号
  • 并非所有浏览器都支持 JSON.parse - 仅限:Mozilla Firefox 3.5+、Microsoft Internet Explorer 8、Opera 10.5+、基于 Webkit 的浏览器(例如 Google Chrome、Apple Safari)en.wikipedia.org/wiki/Json#Native_JSON
【解决方案2】:

如果您使用字符串,则可以使用 eval() - 但它有点调皮,因为它引入了安全和流程问题。

var meval = "[{value: '1', name: 'name1'},{value: '2', name: 'name2'}]";

var 数据 = eval(meval);

【讨论】:

    【解决方案3】:

    Eric 是对的,使用 JSON 通常比使用任意 JavaScript 文字更好。目前,您的文字不是有效的 JSON,因为它没有使用双引号属性名称和字符串值。使用 json_encode 获得与 JSON 兼容的文字语法。

    JSON.parse 不可用时,您可以像其他答案一样回退到eval(),但是您需要使用额外的括号来确保eval 知道前导{ 表示对象文字和不是声明。

    <?php
        function js($s) { // shortcut to save some typing
            echo json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT|JSON_HEX_APOS);
        }
    
        $data= array(name=>$row['name'], value=>$row['value']);
    ?>
    <input type="hidden" id="data" value="<?php js($data); ?>"/>
    
    <script type="text/javascript">
        var json= document.getElementById('data').value;
        var data= 'JSON' in window? JSON.parse(json) : eval('('+json+')');
    </script>
    

    实际上js 函数中的JSON_HEX 选项允许以在HTML 属性或&lt;script&gt; 块中同样有效的方式输出文字,因此您确实可以省略隐藏的输入并说:

    <script type="text/javascript">
        var data= <?php js($data); ?>;
    </script>
    

    【讨论】:

    • 感谢您的意见。我解决了这个问题。不知何故,通过 php 中的 echo 某些东西被转义了。
    【解决方案4】:

    您需要评估该变量以将其内容转换为数据结构:

    var data = {items: [eval(meval)]};
    

    【讨论】:

      【解决方案5】:

      以这种格式将项目放入隐藏输入中:

      "name1"."|"."name2"."|"."name3"... and so on
      

      然后在 JS 中:

      var list = document.getElementById("yourelement").value;
      var arrayOfStuff = list.split("|");
      

      现在你的 JS 数组看起来像这样:

      array() {
          [0] => "Name1"
          [1] => "Name2"
          [2] => "Name3"
          ... and so on
      }
      

      【讨论】:

        猜你喜欢
        • 2020-09-20
        • 2018-12-20
        • 1970-01-01
        • 2012-04-01
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多