、各フィールドはデフォルトで送信時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
});
});
は以下のparamsを掲載します:
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>
今、あなたは、あなたが探していた構造体の配列を持っています。その後、配列をループして挿入を実行できます。
あなたはこれまで何を持っていますか? – KobbyPemson