JSON.stringify JS массив для отправки в PHP и json_decode в PHP - PullRequest
0 голосов
/ 08 июля 2019

У меня есть форма с различными разделами, когда пользователь сохраняет раздел, он отправляется через 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

// ------ EDIT ------ //

Я сделал это:

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 голосов
/ 08 июля 2019

Проблема заключалась в строковом преобразовании многомерного массива, замене его на объект, и он работал как ожидалось.

Вместо того, чтобы объявлять его как:

var myVar = [];

Я просто изменил его на:

var myVar = {};
...