我想用javascript动态填充数组,然后将其转换为json字符串并将其传递给php来处理它。
问题:
当我像-code 1-那样定义数组时,输出是预期的:
var feld = {
"key1" : "1",
"key2" : "2",
"key3" : "3"
};
for (key in feld) { console.log (key + "= " + feld[key]); }
var jsonString = JSON.stringify(feld);
console.log(jsonString);
输出:
key1 = 1
key2 = 2
key3 = 3
{ “KEY1”: “1”, “KEY2”: “2”, “KEY3”: “3”}
如果我将数组定义为-code 2-
var feld = new Array ();
feld["key1"]="1";
feld["key2"]="2";
feld["key3"]="3";
for (key in feld) { console.log (key + "= " + feld[key]); }
var jsonString = JSON.stringify(feld);
console.log(jsonString);
输出:
key1 = 1
key2 = 2
key3 = 3
[]
这意味着,使用代码-2-没有任何内容可以传递给php 怎么了?
答案 0 :(得分:2)
" -code 1 - "它不是一个数组,它是一个非数组对象。 " -code 2 - "是一个数组,但用作非数组对象。 (并且当你对其进行字符串化时,你没有看到你的非数组属性的原因是因为它是一个数组,JSON.stringify
只序列化数组条目,而不是非数组属性。)
如果您需要数组,那么您需要创建一个数组:
var feld = ["1", "2", "3"];
但听起来你不想要一个数组,你真的想要一个对象,就像你的第一个例子。如果将其转换为JSON并将其发送到服务器,请使用json_decode
将其解码为PHP对象,您可以在其中访问key1
,key2
和key3
属性获得他们的价值观。
答案 1 :(得分:0)
您在js中使用php中的数组混淆数组。如果在php中你可以为这样的数组定义文字键:
<?php
$a = array( 'key1' => 1);
$a['key1] === 1
在js中,它相当于一个对象而不是一个数组。
如果你愿意的话,Js更像数学,具有数组的概念,
a = [2, 4, 6];
它只是一个由数字索引给出的值/对象列表。
a[1] === 4
答案 2 :(得分:0)
在JavaScript中,您可以将属性附加到数组,该数组不是此数组的成员。例如:
let array = new Array(); // Creates empty array: []
array[0] = 123; // Inserts a member to array
console.log(array) // Will output: [123]
array["abc"] = 789 // Attaches a property to array
console.log(array) // Will output: [123], no members were added to array
console.log(array.abc) // Will output: 789
这是可能的,因为Array也充当对象,因此它有成员(索引)和属性(有键)。
数组没有键(key0,key2,key3,...),只有索引(0,1,2,...)。您可能想要一个地图或一个数组。地图是由您附加到问题的代码(第一部分)创建的,数组可以创建如下:
var feld = new Array ();
feld[0]="1";
feld[1]="2";
feld[2]="3";
var jsonString = JSON.stringify(feld);
console.log(jsonString);
答案 3 :(得分:-1)
你必须对你的数组进行客观化:
...
feld = Object.assign({}, feld);
var jsonString = JSON.stringify(feld);
...