1

我正在构建一个包含一组问题和答案的应用程序。用户将回答每个问题,最后单击“保存”按钮。

我希望将问题和响应的组合存储为结构数组。数组中的每个条目都是 question_id 和 response_id 的结构。

一旦用户单击“保存”按钮,我需要将条目保存在数据库中。

  • 如何将结构数组传递给 cfc?
  • 我将如何处理结构数组以将它们插入数据库?

请帮忙。

4

1 回答 1

2

作为一个表单,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>

现在你有了你正在寻找的结构数组。然后,您可以循环数组并执行插入。

于 2011-01-12T14:45:47.587 回答