Отправить массив JSON из Javascript и получить значения в php - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь отправить массив JSON из Javascript в Php для вставки в базу данных.Я вижу, как массив отображается в журнале консоли, но я не знаю, как получить его в Php.Массив JSON будет использоваться в моем списке опций каскадирования, где выбранные значения будут отображаться в таблице.Вот где функция SaveData получит значение для отправки в Php.

var ModelArray = {
  "Mammals": {
    "Dog": {
      "Dog Food": ["Milk"]
    },
    "Cat": {
      "Cat food": ["Milk"]
    },
    "Tiger": {
      "Meat": ["Water"]
    },
    "Monkey": {
      "Banana": ["Water"]
    }
  },
  "Reptiles": {
    "Snake": {
      "Rat": ["None"]
    },
    "Turtle": {
      "Plant": ["Water"]
    },
    "Lizard": {
      "Insects": ["None"]
    },
    "Crocodile": {
      "Meat": ["Water"]
    }
  }
}


function SaveData() {

  var DataList = [];
  var table = document.getElementById("bod");
  var rowLength = table.rows.length;

  //loops through rows    
  for (i = 0; i < rowLength; i++) {

    //gets cells of current row  
    var oCells = table.rows.item(i).cells;

    //gets amount of cells of current row
    //var cellLength = oCells.length-2;

    //loops through each cell in current row
    var item = [];
    item["destination"] = oCells.item(0).innerHTML;
    item["criteria"] = oCells.item(1).innerHTML;
    item["material"] = oCells.item(2).innerHTML;

    DataList.push(item)

    request = new XMLHttpRequest()
    request.open("POST", "DOM_SAVE.php", true)
    request.setRequestHeader("Content-type", "application/json")
    request.send(DataList);

  }
  console.log(DataList);
}

КОД PHP

<?php

$DataList = file_get_contents('php://input');
echo '$DataList';

  ?>

1 Ответ

0 голосов
/ 13 декабря 2018

Вам необходимо сериализовать массив DataList:

request.send(JSON.stringify(DataList));

И вы не должны отправлять запрос внутри цикла for.Создайте весь цикл DataList в цикле, а затем отправьте запрос AJAX в конце.

И если вы хотите отправить массив объектов с именованными свойствами, вы не должны использовать массив в качестве элементов.Измените

var item = [];

на

var item = {};

function SaveData() {

  var DataList = [];
  var table = document.getElementById("bod");
  var rowLength = table.rows.length;

  //loops through rows    
  for (i = 0; i < rowLength; i++) {

    //gets cells of current row  
    var oCells = table.rows.item(i).cells;

    //gets amount of cells of current row
    //var cellLength = oCells.length-2;

    //loops through each cell in current row
    var item = {};
    item["destination"] = oCells.item(0).innerHTML;
    item["criteria"] = oCells.item(1).innerHTML;
    item["material"] = oCells.item(2).innerHTML;

    DataList.push(item)


  }
  var request = new XMLHttpRequest()
  request.open("POST", "DOM_SAVE.php", true)
  request.setRequestHeader("Content-type", "application/json")
  request.send(JSON.stringify(DataList));

  console.log(DataList);
}

В PHP вы захотите декодировать его:

$DataList = json_decode(file_get_contents("php://input"), true);
var_dump($DataList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...