Как форма, каждое поле является частью области FORM
после отправки по умолчанию. Эта область представляет собой простую структуру (т.е. FORM = {question_id: value, response_id: value}
), из которой вы можете легко ссылаться на каждый элемент: (для вывода) <cfoutput>#FORM.question_id#</cfoutput>
.
Итак, скажем, у вас было 10 вопросов, и что всегда будет ответ. Во-первых, у вас будет скрытое поле формы для каждого вопроса:
<input type="hidden" name="questionId_01" value="01" />
<input type="hidden" name="questionId_02" value="02" />
Обратите внимание, что каждое поле имеет другое имя. Это необходимо для получения уникальной ссылки на каждое поле. Затем вы создаете соответствующие поля ввода для каждого вопроса. Скажем, это были вопросы с несколькими вариантами ответов, а вы использовали радио-кнопки. Вы бы создали свои поля с тем же именем, но со значениями выбора:
<input type="radio" name="responseId_01" value="a" />
<input type="radio" name="responseId_01" value="b" />
<input type="radio" name="responseId_01" value="c" />
<input type="radio" name="responseId_02" value="a" />
<input type="radio" name="responseId_02" value="b" />
<input type="radio" name="responseId_02" value="c" />
Отправка вашей формы передаст их в виде простых пар имя / значение на сервер. Я вижу тег jQuery, прикрепленный к вашему вопросу (хотя вы его не упомянули), поэтому я предполагаю, что вы делаете Ajax-представление. Большинство людей используют $.serializeArray()
, чтобы поместить данные формы в формат для данных ajax. Это простой способ справиться с этим.
$('myForm').submit(function(e){
e.preventDefault();
$.ajax({
url: 'myProcessor.cfc?method=processForm&returnformat=JSON',
data: $(this).serializeArray(),
success: callbackFunctionName
});
});
Опубликует следующие параметры:
questionId_01 01
questionId_02 02
responseId_01 b
responseId_02 a
method processForm
returnformat JSON
Итак, у вас еще нет массива структур, которые вы ищете на стороне сервера. Вы можете выполнить некоторую обработку на стороне сервера, чтобы создать массивы, зацикливая область действия ARGUMENTS
:
<cfscript>
LOCAL.processArr = ArrayNew(1);
for (LOCAL.i in ARGUMENTS){
if (FindNoCase('questionId',LOCAL.i)){
LOCAL.tmpArr = ListToArray(LOCAL.i,'_'); // get the Id to find response entity
LOCAL.tmpStr = {questionId = ARGUMENTS[LOCAL.i], responseId = ARGUMENTS['responseId_' & LOCAL.tmpArr[2]]}; // CF arrays start at 1
ArrayAppend(LOCAL.processArr, Duplicate(LOCAL.tmpStr));
}
}
</cfscript>
Теперь у вас есть массив структур, которые вы искали. Затем вы можете зациклить массив и выполнить вставку.