Top.Mail.Ru
Ответы
Аватар пользователя
2 года назад
от
Изменено

Почему в php приходит только часть данных переданных AJAX?

1234567891011121314151617181920212223
 let list = {
 'cause' : [
       {'id' : 0, 'status': 'ajax'}, 
       {'id' : 1, 'status': 'ajax'}, 
       {'id' : 2, 'status': 'ajax'}, 
       {'id' : 3, 'status': 'ajax'}, 
       {'id' : 4, 'status': 'ajax'}
 ],
 'subcause' : [
       {'id' : 0, 'status': 'ajax'},  
       {'id' : 1, 'status': 'ajax'},  
       {'id' : 2, 'status': 'ajax'},  
       {'id' : 3, 'status': 'ajax'},  
       {'id' : 4, 'status': 'ajax'}
 ]
};

let opt = {
'status' : 'ajax'
'data' : list
}
json.stringify(opt)
 

После такого запроса, выполняя var_dump($_POST) в php я получаю только status, и cause массив.
То есть если я отправлю не list а list['cause'] результат запроса не меняется.Так же пробовал так записать 'data' : [list[cause], list[subcause]] тоже приходит только cause массив, а subcause как будто и не передаётся. По отдельности данные приходят, но одним запросом не получается. Размер данных 16 обьектов в cause, и 86 обьектов в subcause, эти два массива внутри держат 2-3 значения.
Проверил даже этот маленький массив передать как в выше указан. Тоже приходит только list['cause'] хотя элементов всего 8+-

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

В $_POST приходит только то, что отправлено в стандартном формате html-формы. Например, если ты отправляешь JS-объект как есть БЕЗ ручной сериализации посредством jQuery $.post, всё придёт нормально.
Но если ты сериализуешь тело запроса в JSON, то получать его нужно примерно так:

12
 $body = file_get_contents('php://input'); // чтение тела запроса в строку
$data = json_decode($body, true); // десериализация JSON в PHP-массив 
Аватар пользователя
Мыслитель

Если часть, то форму смотри внимательнее или код в JS. Скорее, второе. Наверняка там какой-то post не указан корректно.