Недавно у меня возникла проблема с кодированием, которая потребовала от меня (по необъяснимым причинам) только одной строки базы данных при сохранении ввода формы. Мне нужно было хранить ответы пользователей и введенные пользователем категории ответов в БД, и я мог использовать только столбцы ниже.

Кроме того, пользователь мог ввести произвольное количество категорий и ответов, и все они должны были быть добавлены в DOM с помощью jQuery по щелчку.

Ввод для каждого ответа будет в следующем формате:

User-Entered Category
— Answer 1
— Answer 2
Another User-entered Category
— Answer 1
— Answer 2
— Answer 3
A third user-entered category
— Answer 1
— Answer 2

Я решил, что мне нужно сериализовать ответы в строку JSON, чтобы все они могли храниться в столбце ответов. К счастью, какая-то добрая душа уже написала JS, чтобы помочь мне легко выполнить это в jQuery. Проверьте Github для jQuery Serialize Object. Отлично, поэтому все, что мне нужно было сделать, это дать каждой категории уникальный идентификатор, и у меня была форма JSON, которую я хотел.

Вот мой шаблон ответа:

const newAnswer = $(`
 <div class=”answer-template”>
  <input type=”text” class=”form-control” name=”responseGroup0[answers][0]” placeholder=”Enter your insight/step/answer here…”>
 </div>`)

А вот как я увеличивал счетчик каждый раз, когда добавлялся новый ответ:

let answerCounter = 0;
answerCloneButton.click((event) => {
 answerCounter++;
// jQuery omitted
 answerClone.find(':text').attr('name', 'responseGroup' + stacticCounter + '[answers][' + answerCounter + ']');
}

Затем, когда форма была нажата, мне нужно было только вызвать метод serializeJSON():

$(“#submitAnswers”).click(function () {
 const answers = $(“form”).serializeJSON() 
}

Что дало мне форму, которую я хотел:

answers = {
 “responseGroup0”:
 {“categoryName”:”Pre ordering”,
 “answers”:[“Answer 1”,”Answer 2"]},
 “responseGroup1”:
 {“categoryName”:”Post ordering”,”answers”:[“Answer 1”,”Answer 2",”Answer 3"]},
 “responseGroup2”:
 {“categoryName”:”Returning”,”answers”:[“BLAH”,”Answer Blah”]}
 }

Хотя это создает краткую базу данных, кажется менее чем оптимальным выполнять всю эту предварительную обработку для внесения данных в базу данных. Увы, не мой призыв!