9

アプリケーションサーバーとしてColdFusionを使用し、データベースにSQLServerを使用しています。車両の数をリストするselectフォーム要素があります:Volvo S60、、。BMW M6VW Jetta

ユーザーが選択した車両に基づいて、データベースクエリを実行して、ユーザーが選択した車両の「タイプ」(SUV、クーペ、コンバーチブルなど)を見つけるためのWebページが必要です。データベースから返される「タイプ」に応じて、データベースはその車両タイプに適したオプションのリストを返します。私のデータベーステーブルは、車両のドロップダウンの値に基づいてこれを行うことができるので、それはすべて問題ありません。

次に、その車両の「タイプ」で使用可能なオプションをチェックボックスのグループとしてリストします。これを行うのは、データベースの結果セットをループして各行のチェックボックスを生成するという単純なケースである必要があります。

ページを更新せずにこれを実行したい。ドロップダウンから動的に値を取得し、この値をデータベースに渡し、結果を取得して、適切なチェックボックスを表示するにはどうすればよいですか?

4

4 に答える 4

4

以前のコメントで、ColdFusionでこれを行う最も簡単な方法は、フォーム要素をcfcメソッドにバインドすることであると述べました。「cfinputbind」をグーグル検索するとたくさんの例が出てきますが、答えを求められたので、一度書いた例を紹介します。これはOPが望んでいることではありませんが、一般的な考え方を示しています。別の値に基づいて1つのテキストボックスに入力されます。

cfcファイルとcfmファイルは同じディレクトリにある必要があることに注意してください。

.cfmファイル

<!--- When you type a clinic code here: ---->
<div id="clinicCodeInput" class="hidden">
Clinic Code <input name="clinicCode" type="text" />
</div>

<!---- A query result will appear here ---->
<div id="clinicNameFromPatientSatisfaction" class="hidden">
Patient Satisfaction Name <cfinput type="text" 
name="NameOfClinic" 
bind="cfc:PatientSatisfactionClinics.GetClinicName({clinicCode})" 
bindonload="no"> 
</div>

.cfcファイル

<cffunction name="GetClinicName" access="remote" returntype="string">
<cfargument name="clinicCode" type="string" required="yes">
<cfscript>
var clinicName = QueryNew("a");
var returnString = "No Record for Clinic Code " & arguments.clinicCode & ".";
var clinicCodeAsInt = 0;

if (isNumeric(arguments.clinicCode) 
and round(arguments.clinicCode) is arguments.clinicCode)
clinicCodeAsInt = arguments.clinicCode;
</cfscript>

<cfif clinicCodeAsInt gt 0>
<cfquery name="clinicName" datasource="dw">
select name
from patient_satisfaction_clinic
where clinic_code = 
<cfqueryparam cfsqltype="cf_sql_integer" value="#clinicCodeAsInt#">
</cfquery>

<cfif clinicName.recordcount gt 0>
<cfset returnString = clinicName.name[1]>
</cfif>
</cfif>  <!--- clinicCodeAsInt gt 0 --->

<cfreturn returnString>

</cffunction>
于 2012-12-26T13:23:11.640 に答える
3

のAdobeColdFusionドキュメントに<cfajaxproxy>必要なテクニックの例があります。これはあなたが望むことを正確に行うわけではありませんが、要件に合うようにマークアップをプレーンテキストからチェックボックスに変更するだけです。ここで再現するにはコードが多すぎますが、重要なのは<cfajaxproxy>、クライアント側のJSとサーバー側のCFCの間にプロキシを設定して、JSがサーバーからデータを取得できるようにすることです。

を使用<cfajaxproxy>すると、独自のJS AJAX処理をロールする必要がなくなり、JQuery(など)を使用してロールする必要がなくなります。とはいえ、手作業で行うのはそれほど難しいことではありません...そのドキュメントで示されている手法を使用して、CFをフロントエンドコードから完全に分離するのは簡単です(CFを使用してクライアントを実行しないのは良いケースです)。 -サイドスタッフ)...つまり、イベントハンドラーに関連するイベントをリッスンさせ、サーバーに何らかの方法でAJAXコールバックを行ってデータを取得し、それを<div>何かにぶちまけるということです。この場合、CFはプロキシビットのみを提供します。残りは自分で行う必要があります。

于 2012-12-26T10:46:09.397 に答える
2

さて、これが私がやったことで、これまでのところうまくいくようです。しかし、私はアダムとダンの親切な答えをレビューするつもりです。

チェックボックスを除くすべてのフォーム要素を使用して、Vehicle.cfmページにフォームを作成しました。

パラメータを受け取り、SQLクエリを実行し、実際のHTMLを出力してチェックボックスを作成するVehicleOptions.cfmという新しいCFMテンプレートを作成しました。

次に、Vehicle.cfmページのフォームの領域に移動し、チェックボックスを表示して次のように入力しました。 <cfdiv bind="url:cfincludes/vehicleOptions.cfm?VehicleModel={Model}" />

「モデル」は、ユーザーが選択した車両の値を保持するフォーム上の要素のIDです。そのため、ユーザーがドロップダウンリストでモデルを変更するたびに、領域は毎回異なるチェックボックスで更新されます。それは本当に素晴らしく、Javascriptを1行も書く必要はありませんでした!

このソリューションは私が望むものには機能しますが、ColdFusion AJAXの最もエレガントな使用法ではないと思いますか?私が言ったように、私は答えを検討し、より良い解決策を考え出すように努めます。CF開発者の皆さんの助けに感謝します!

于 2012-12-26T22:23:34.530 に答える
1

それは簡単です。各オプションには、値がエンコードされている必要があります。

<select>
<option class="car" name="car" value="volvo">Volvo</option>
<option class="car" name="car" value="honda">Honda</option>
<option class="car" name="car" value="ford">Ford</option>
</select>

次に、jQueryを使用します。

$('#go').on('click', function() {
    var car = $('.car:selected').val(); 
    // make ajax call here
});​

これが実際の例です:http://jsfiddle.net/Yxmjk/。これはAJAX呼び出しを示していませんが、AJAX呼び出しに含めるデータを取得する方法を示しています。

于 2012-12-25T02:42:48.507 に答える