ここではオブジェクト指向ではなく、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を使っていました。
個人的には、やったことがないものもあるので、
あらためてマニュアルを参照することをおすすめします。
あらたな発見があるかもしれませんね。