ここではオブジェクト指向ではなく、ColdFusion独自の使い方をするものです。
1.cfformタグを使ってコンポーネントの関数を呼び出すことができます。
2.cfajaxproxyタグを使って、Javascriptからcfcのメソッドを呼び出すことができます。
3.URLでコンポーネントのメソッドを呼び出すことができます。
以下のようなcfcを用意します。
●test.cfc
<cfcomponent> <cffunction name="getData" access="remote" returntype="array" output="false"> <cfargument name="data" type="string"> <cfset var ary = ["aa1","aa2","bb1","bb2","cc1","cc2"]> <cfset var qry = QueryNew("")> <cfset QueryAddColumn(qry, "fld", "varchar", ary)> <cfquery name="qry" dbtype="query"> select fld from qry where fld like '#arguments.data#%' </cfquery> <cfreturn ListToArray(ValueList(qry.fld))> </cffunction> <cffunction name="getData2" access="remote" returntype="string" output="false"> <cfargument name="data" type="string"> <cfreturn SerializeJSON(getData(arguments.data))> </cffunction> </cfcomponent>
まず、cfcをURLで呼び出すテストを行います。
cfcでテストをせずにajaxとして利用すると、
cfcがエラーなのか、Javascriptの設定が悪いのか判断がつきませんので、
まずはcfcをURLで呼び出してみましょう。
http://○○/test.cfc?method=getData&data=a
ブラウザのソースを見てもらうと、wddxPacketタグで、くくられています。
次にcfformを使ってcfcを呼び出す例です。
●test1.cfm
<cfform name="form"> 文字入力 <cfinput name="data" type="text" autosuggest="cfc:test.getData({cfautosuggestvalue})"> </cfform>
入力項目に「a」「aa」「b」など入力すると、下に前方一致する文字列が表示されます。
次にJavaScriptから呼び出す例です。
●test2.cfm
<cfajaxproxy cfc="test" jsclassname="testjs"> <cfoutput> <script type="text/javascript"> <!-- var a = new testjs(); json = a.getData2('a'); eval("e="+json); for(i in e){ alert("data="+e[i]); } //--> </script> </cfoutput>
個人的にはcfajaxproxyタグを使ったことがなかったのですが、
すごくわかりやすいですね。
今まではjQueryの$.postを使っていました。
個人的には、やったことがないものもあるので、
あらためてマニュアルを参照することをおすすめします。
あらたな発見があるかもしれませんね。