通过onClick事件将多维数组传递给javascript,子数组被只读为object
。
这是json_encode
d数组:
{
"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_decode
d在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;
}
我错过了一个步骤吗?
问题是PHP数组= JavaScript数组。
在PHP中,数组可以有非数字的索引(也就是哈希表或关联数组)。在JavaScript中,只有数组具有数字索引。其他的都是对象。上面的JSON在javascript中表示一个对象。
再次检查控制台日志。我知道在chrome中你可以扩展对象键,我敢打赌你会发现你所有的数据都在那里。
这完全在意料之中。您正在记录包含三个属性的数据对象。第一个属性名为products
,其类型为Object
;第二个属性名为token
,其类型为string
,输出;最后一个属性为customer_id
,其值为1
。如果你要打电话:
console.log(data.products)
您将获得products
对象的属性日志。您可以对每个对象的每个属性执行此操作,以记录它们的值。您可以将JavaScript对象视为键值对的哈希,其中值可以是任何值,包括键值对的另一个哈希。