这里有什么问题吗?
第一个示例:
console.log(ntags);
console.log(JSON.stringify(ntags));
控制台输出(Google Chrome):
[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){
...
});
客户端不向服务器端发送任何post数据(PHP中$_POST为空)。
最佳答案
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}]
关于JavaScript 忽略多维关联数组键/值 - 这里出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34617161/