【问题标题】:Passing json encoded MultiDimensional Array to javascript via onclick event通过 onclick 事件将 json 编码的多维数组传递给 javascript
【发布时间】:2014-07-18 20:24:19
【问题描述】:

通过 onClick 事件将多维数组传递给 javascript,子数组被只读为object

这是json_encoded 数组:

{
    "products": {
        "41::": {
            "key": "41::",
            "product_id": "41",
            "name": "iMac",
            "model": "Product 14",
            "shipping": "1",
            "image": "data/demo/imac_1.jpg",
            "option": [],
            "download": [],
            "quantity": 3,
            "minimum": "1",
            "subtract": "1",
            "stock": true,
            "price": 100,
            "total": 300,
            "reward": 0,
            "points": 0,
            "tax_class_id": "9",
            "weight": 15,
            "weight_class_id": "1",
            "length": "0.00000000",
            "width": "0.00000000",
            "height": "0.00000000",
            "length_class_id": "1"
        }
    },
    "token": "17263a44810f21b88362f908d2c4be02",
    "customer_id": "1"
}

json_decoded 在 php 中,但在 javascript 中通过 console.log(data) 时完美返回:

{products: Object, token: "17263a44810f21b88362f908d2c4be02", customer_id: "1"}

php:

`<a id="button-checkout" class="button" onclick='checkOut(<?php echo $json; ?>)'>
        <span>Process Cart to Order</span></a>`

javascript:

function checkOut(data) {
    console.log(data);
    return false;
}

我错过了一步吗?

【问题讨论】:

    标签: javascript php json multidimensional-array


    【解决方案1】:

    问题在于 PHP 数组 != JavaScript 数组。

    在 PHP 中,数组可以具有非数字索引(也称为哈希表或关联数组)。在 JavaScript 中,only 数组是带有数字索引的数组。其他一切都是对象。您上面的 JSON 表示 javascript 中的一个对象。

    再次检查您的控制台日志。我知道在 chrome 中你可以扩展对象键,我敢打赌你会发现你所有的数据都在那里。

    【讨论】:

    • 这并不完全正确。数组实际上只是具有一些扩展功能的 JavaScript 对象。这意味着 JavaScript 中的所有内容,包括 数组,都是对象。同样,JavaScript 对象只是属性的集合。换句话说,JavaScript 对象本质上是键值对的哈希(哈希表/关联数组之类的构造)。
    • 你是对的。我曾考虑将其包含在答案中,但我不想包含太多在回答问题时技术上不必要的细微差别。不过,感谢您指出这一点。
    • 谢谢你们。我给pje“给出”了“答案”,因为分数会产生更大的不同。现在我需要弄清楚为什么 $.parseJSON(data); 返回 null。
    【解决方案2】:

    这完全符合预期。您正在记录包含三个属性的数据对象。第一个属性命名为products,其类型为Object,第二个属性命名为token,其输出的类型为string,最后一个属性为customer_id,其值为1。如果你打电话:

    console.log(data.products)

    您将获得products 对象属性的日志。您可以对每个对象的每个属性执行此操作以记录它们的值。您可以将 JavaScript 对象视为键值对的散列,其中值可以是任何内容,包括键值对的另一个散列。

    【讨论】:

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