Я ищу хороший учебник или любую подсказку, которая ответила бы на этот простой вопрос. Поскольку все учебники, кажется, показывают только примеры «простых решений», они, очевидно, не для меня.
У меня есть многомерная вложенная форма html, в которой следует размещать данные в основной таблице и связанные данные в связанных таблицах (и связанные с ними данные, если применимо).
Я знаю, как это сделать, используя php. Но если это java REST сервис? Тогда тело запроса POST должно быть в формате json, верно? И данные формы должны быть преобразованы в json с использованием javascript?
Мой пример формы:
<form id="main" method="post" action="">
<input type="hidden" name="id">
<input type="text" name="name" value="main name">
<input type="hidden" name="location[0][id]">
<input type="hidden" name="location[0][main_id]" value=":main.id">
<input type="text" name="location[0][name]" value="locname value">
<input type="hidden" name="collection[0][id]">
<input type="hidden" name="collection[0][main_id]" value=":main.id">
<input type="text" name="collection[0][heading]" value="heading value">
<input type="hidden" name="collection[0][items][0][id]">
<input type="hidden" name="collection[0][items][0][collection_id]" value=":collection.id">
<input type="text" name="collection[0][items][0][title]" value="level 3 title">
<input type="text" name="collection[0][items][0][year]" value="2020">
<textarea name="collection[0][items][0][description]">0202</textarea>
<input type="hidden" name="collection[0][items][1][id]">
<input type="hidden" name="collection[0][items][1][collection_id]" value=":collection.id">
<input type="text" name="collection[0][items][1][title]" value="another title">
<input type="text" name="collection[0][items][1][year]" value="2019">
<textarea name="collection[0][items][1][description]">another description</textarea>
<input type="hidden" name="collection[1][id]">
<input type="hidden" name="collection[1][main_id]" value=":main.id">
<input type="text" name="collection[1][heading]" value="another heading">
<input type="submit" value="Submit">
</form>
PHP преобразует такие данные формы с такими входными именами, как таблица [0] [othertable] [1] [field], в многоуровневый массив $ _POST, но как javascript может создать необходимое тело запроса POST в формате json, как в следующем примере?
Примечание: данные типа ": main.id" или " : collection.id "в следующем примере означает значение pk родительских данных.
{
"id":":id",
"name":"main name",
"location":
[
{
"id":":id",
"main_id":":main.id",
"name":"locname value"
}
],
"collection":
[
{
"id":":id",
"main_id":":main.id",
"heading":"heading value",
"items":
[
{
"id":":id",
"collection_id":":collection.id",
"title":"level 3 title",
"year":"2020",
"description":"0202"
},
{
"id":":id",
"collection_id":":collection.id",
"title":"another title",
"year":"2019",
"description":"another description"
},
]
},
{
"id":":id",
"main_id":":main.id",
"heading":"another heading",
"items":[]
}
]
}
Что мне потребуется затем сделать с кодом java, чтобы сгенерировать все необходимые INSERT INTO в этом единственном элементе пост, это наверное отдельная тема. В любом случае, конечная цель:
INSERT INTO main (name) VALUES ('main name');
SET @mainId = LAST_INSERT_ID();
INSERT INTO location (main_id, name) VALUES (@mainId, 'locname value');
INSERT INTO collection (main_id, heading) VALUES (@mainId, 'heading value');
SET @collectionId = LAST_INSERT_ID();
INSERT INTO items (collection_id, title, year, description) VALUES (@collectionId, 'level 3 title', '2020', '0202');
INSERT INTO items (collection_id, title, year, description) VALUES (@collectionId, 'level 3 title', '2020', '0202');
INSERT INTO items (collection_id, title, year, description) VALUES (@collectionId, 'another title', '2019', 'another description');
INSERT INTO collection (main_id, heading) VALUES (@mainId, 'another heading');
SET @collectionId = LAST_INSERT_ID();
Заранее большое спасибо!