У меня есть скрипт jQuery, который добавляет скрытые входные данные в форму всякий раз, когда определенный входной сигнал .class
претерпевает изменения.В зависимости от пользовательского ввода, он генерирует значения для других не редактируемых столбцов, которые также помещаются в форму как скрытые входные данные.
Вывод формы выглядит следующим образом:
<input type="hidden" name="[1008016BSTL][1][part]" value="1008016BSTL" />
<input type="hidden" name="[1008016BSTL][1][price]" value="123" />
<input type="hidden" name="[1008016BSTL][1][priceExVat]" value="102.50" />
<input type="hidden" name="[1008016BSTL][1][fee]" value="10.53" />
<input type="hidden" name="[1008016BSTL][1][profit]" value="68.41" />
Это только один наборданных, которые я пытаюсь записать, но для остальных это то же самое, сохраните исходный ключ и вложенный ключ.
Моя оболочка формы выглядит следующим образом:
<form method="post" id="submit-form" enctype="multipart/form-data">
<input type="submit" value="Save" />
</form>
С моимAJAX выглядит как:
$('form#submit-form').submit(function(e)
{
e.preventDefault();
let data = $('form#submit-form').serializeArray();
$.ajax({
url: '/save-pricing.php',
data: {data: JSON.stringify(data)},
type: 'post',
success: function(res)
{
console.log(res)
},
error: function(res)
{
alert('Error! I won\'t tell you what it is. But, I\'ll give you a clue: 21');
console.log(res)
}
})
})
Я также пытался (для настройки данных):
let data = $('form#submit-form').serialize();
data = JSON.stringify(data);
$.ajax({
...
data: {data: data}
...
})
, а также опуская функцию .stringify()
.
Этоприходит к PHP так:
<code><?php
echo '<pre>'. print_r($_POST, 1) .'
';/ ** * Ниже для .serialize () -> вывод - пустой массив * * parse_str ($ _ POST ['data'], $ postData) * echo '
'. print_r($postData, 1) .'
';* /
упрощенный вывод (просто удаление других наборов) с помощью .serializeArray()
:
Array
(
[data] => [
{"name":"[1008016BSTL][1][part]","value":"1008016BSTL"},
{"name":"[1008016BSTL][1][price]","value":"123"},
{"name":"[1008016BSTL][1][priceExVat]","value":"102.50"},
{"name":"[1008016BSTL][1][fee]","value":"10.53"},
{"name":"[1008016BSTL][1][profit]","value":"68.41"}
]
)
Это нормально, я думаю, я мог бы, вероятно, сгруппировать по имени и объединить вмассив, но кажется, что он уже должен делать это с .serialize()
на стороне jQuery и затем parse_str()
на стороне PHP.
Однако, как я уже говорил, parse_str()
и .serialize()
получить пустой массив, который я не могу использовать.
, поэтому мой вопрос: Как мне успешно отправить данные многомерных форм в PHP через jQuery?
Редактировать
Добавлено:
dataType: 'json'
с .serialize()
, а затем JSON.stringify(data)
, удалено parse_str()
и выводится:
Array
(
[\"] => Array
(
[1008016BSTL] => Array
(
[1] => Array
(
[part] => 1008016BSTL
)
)
)
)