PHP / JSON-JSON.stringify JS数组发送到PHP和json_decode

时间:2019-07-08 09:34:00

标签: javascript php json multidimensional-array

我有一个带有不同节的表单,当用户保存一个节时,它将通过JS发送到另一个文件,在该文件中将其保存为PHP中的会话变量,直到填写完其余表单,然后全部处理完毕在一起。

这是我的JS发送我的数组:

console.log(price_array);
price_array = JSON.stringify(price_array);
var formData = new FormData();
formData.append("price_array", price_array);
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
    if(this.readyState == 4 && this.status == 200){
        //session set
    }
};
xmlhttp.open("POST", "myFile.php", true);
xmlhttp.send(formData);

因此,在此之前,在对字符串进行字符串化和发送之前,在控制台中登录阵列时,我可以完全按照自己的方式看到阵列。

(2) [empty, Array(0)]1: Array(0)EUR: Array(0)cost: "100"discount: "10"margin: "10"z1: "0"z2: "10"z3: "20"z4: "30"z5: "40"z6: "50"z7: ""z8: ""length: 0__proto__: Array(0)GBP: Array(0)cost: "100"discount: "10"margin: "10"z1: "0"z2: "10"z3: "20"z4: "30"z5: "40"z6: "50"z7: ""z8: ""length: 0__proto__: Array(0)attribute: "default"model_no: "test"length: 0__proto__: Array(0)length: 2__proto__: Array(0)

然后我的PHP文件非常简单,就是:

if(isset($_POST['price_array'])){
    $_SESSION['price_array'] = json_decode($_POST['price_array']);
    echo 'session_set';
    exit();
}

但是,当我执行var_dump($_SESSION['price_array']);时,它显示为空白。谁能解释为什么会这样或我能对此做什么?任何帮助或协助,将不胜感激。

array (size=2)
  0 => null
  1 => 
    array (size=0)
      empty

// ------编辑------ //

我这样做了:

console.log(price_array);
var json = JSON.stringify(price_array);
console.log(json);

得到了:

(2) [empty, Array(0)]
1: Array(0)
EUR: [cost: "1830.00", discount: "31.00", margin: "28.00", z1: "0.00", z2: "110.00", …]
GBP: [cost: "1525.00", discount: "31.00", margin: "28.00", z1: "50.00", z2: "0.00", …]
attribute: "1-1_"
model_no: "FMS 20M"
length: 0
__proto__: Array(0)
length: 2
__proto__: Array(0)

[null,[]]

因此,在将其字符串化时,出现问题是因为它是多维数组吗?

1 个答案:

答案 0 :(得分:0)

问题是将多维数组字符串化,将其更改为对象,并且按预期工作。

与其像这样声明:

var myVar = [];

我刚刚将其更改为:

var myVar = {};