Передать массив карт на страницу PHP - PullRequest
0 голосов
/ 04 марта 2019

Для моего проекта я использую это:

var arr = new Map();, чтобы создать карту с JS.

После каждого нажатия на элементы, я использую это для заполнения карты.

arr.set(roomid + '_' + date, {
    status: updatedStatus,
    date: date,
    roomid: roomid
});

После нескольких нажатий на панели консоли у меня есть:

[Log] Map {"48_2019-03-09" => {status: "Open", date: "2019-03-09", roomid: 48}, "48_2019-03-19" => {status: "Open", date: "2019-03-19", roomid: 48}} (2) (app.js, line 93)

Итак, это то, что я хочу.

Теперь мне нужно пройтиэти данные в PHP через Ajax, например:

$.ajax({
    type: 'POST',
    data: { datas: arr },
    url  : 'update.php',
    success: function(responseText){
        ...
    }
});

На моей странице PHP, у меня есть следующий код:

$arr = $_POST;
print_r($arr);

Но этот код выводится:

Array
(
)

Но это не работает, потому что моя страница PHP печатает пустой массив.

Что я делаю не так, пожалуйста?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

вам нужно преобразовать карту в объект json.Самый простой способ, который я знаю, это сделать строку, а затем проанализировать объект JSON.

JSON.parse (JSON.stringify ([... arr])))

$.ajax({
    type: 'POST',
    data: { datas: JSON.parse(JSON.stringify([...arr])) },
    url  : 'update.php',
    success: function(responseText){
        ...
    }
});

Ссылка: http://2ality.com/2015/08/es6-map-json.html

0 голосов
/ 04 марта 2019

Ajax ожидает объект, а не карту.Поэтому вам нужно преобразовать вашу карту в объект перед передачей ее в запрос ajax.

function mapToObject(map) {
  var obj= {}
  map.forEach(function(value, key) {
      obj[key] = value
  }
  return obj
}

....

$.ajax({
    type: 'POST',
    data: { datas: mapToObject(arr) },
    url  : 'update.php',
    success: function(responseText){
        ...
    }
});

РЕДАКТИРОВАТЬ: только что заметил, если вам нужно передать полный объект JS в PHP, вам нужно преобразовать его в JSON.

Таким образом, настоящий вызов ajax должен быть:

$.ajax({
    type: 'POST',
    data: JSON.stringify({ datas: mapToObject(arr) }),
    url  : 'update.php',
    success: function(responseText){
        ...
    }
});

и на вашем сервере:

$data = file_get_contents("php://input");
print_r(json_decode($data, true));
...