Как из формы вытянуть объект?

Через ajax передаю форму, у которой 2 элемента:
...
let form = new FormData();
form.append('id', '1');

let data = {"name":"John", "sex":"male", "age":"33"};
form.append('data', data);
...


Как в php вытащить объект?
var_dump($_POST["id"]);
// string(1) "1"
var_dump($_POST["data"]);
// string(15) "[object Object]"
var_dump($_POST["data"]["sex"]);
// string(1) "["
var_dump($_POST["data"] -> sex);
// NULL NULL
  • Вопрос задан
  • 53 просмотра
Решения вопроса 3
@zkrvndm
Боты, парсеры, расширения
Внутрь form.append() нельзя вторым параметром передать объект: можно передавать только строку или только файл, но не объект! Для отправки объектов на сервер вам нужно использовать JSON. И кстати, в вашем примере не хватает кода отвечающего за отправку формы.
Ответ написан
@Mellorn
Вы неправильно работаете с FormData.
Почитайте про метод append тут.
Там чётко написано, что если второй параметр не является строкой, то он будет в неё конвертирован. Т.е. объект вы передавать не можете.
Можно так:
form.append('data[name]', 'John');
form.append('data[age]', 33);

Потом в php:
var_dump($_POST['data']['name']);
И да, как уже заметили, можно посмотреть в сторону того, чтобы передавать на сервер данные в json.
Ответ написан
sslion
@sslion
Как писали выше, объект отправить ты не можешь, сделай так:
let data = {"name":"John", "sex":"male", "age":"33"};
form.append('data', JSON.stringify(data));


В php делай примерно так:
$data = json_decode($_POST['data']);
json_decode вернет или объект, или массив в зависимости от второго параметра
json_decode
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы