Javascript忽略了多维关联数组键/值 - 这里有什么问题?

时间:2016-01-05 16:59:47

标签: javascript jquery arrays

这里有什么问题?

第一个例子:

console.log(ntags);
console.log(JSON.stringify(ntags));

控制台输出(谷歌浏览器):

[Array[0], Array[0]]
    0: Array[0]
        length: 0
        numerical_value: null
        tag_id: "3"
    1: Array[0]
        length: 0
        numerical_value: "12"
        tag_id: "5"


[[],[]]

显然变量" ntags"填充了一定数量的具有特定值的关联数组。但是JSON.stringify会生成一个空数组。

第二个例子 - 如果我尝试直接使用Ajax发布变量ntags,就会出现同样的问题:

$.ajax({ type:"POST", url: "/?tag_connection=update&fdata_id="+save_id, data: {cons: ntags}, success: function(result){
...
});

客户端不向服务器端发送任何发布数据(PHP中$ _POST为空)。

1 个答案:

答案 0 :(得分:1)

JSON序列化不会序列化Array的属性,这根本不是预期的行为 - 数组是值列表,按顺序排列。由于不是预期的行为,因此不会对此属性进行序列化。你可以从技术上将其序列化,但它会使数组作为数据类型失败。

例如,让我们说我们序列化数组[1,2,3,4] - 然后JSON中的预期输出是:

[1,2,3,4]

仅仅是因为它的类型。如果数组像对象一样被序列化,那么输出可能如下所示:

{0:1,1:2,2:3,4:4,length:4}

正如您所看到的,这需要更长时间 - 这意味着您需要通过网络发送更多数据,以及使用任何其他编程语言创建的自定义对象。这样我们都同意数组。

因此,在这种情况下,您可能只想使用一个对象,它将输出预期值。尝试序列化:

[{length:0,numerical_value: null, tag_id: 3}, {length: 0, numerical_value: null, tag_id:2}]