我正在构建一个包含一组问题和答案的应用程序。用户将回答每个问题,最后单击“保存”按钮。
我希望将问题和响应的组合存储为结构数组。数组中的每个条目都是 question_id 和 response_id 的结构。
一旦用户单击“保存”按钮,我需要将条目保存在数据库中。
- 如何将结构数组传递给 cfc?
- 我将如何处理结构数组以将它们插入数据库?
请帮忙。
我正在构建一个包含一组问题和答案的应用程序。用户将回答每个问题,最后单击“保存”按钮。
我希望将问题和响应的组合存储为结构数组。数组中的每个条目都是 question_id 和 response_id 的结构。
一旦用户单击“保存”按钮,我需要将条目保存在数据库中。
请帮忙。
作为一个表单,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>
现在你有了你正在寻找的结构数组。然后,您可以循环数组并执行插入。