Webフォームの送信時にAJAX呼び出しを行うWebページを構築しています。 AJAXはcfcを呼び出します。ここでは、Webフォームの値を入力引数として渡すSQLストアドプロシージャを呼び出す関数があります。ここまでは問題ありませんが、ストアドプロシージャによって複数の結果セットが返されたときに、呼び出し元のAJAX関数にデータを返す方法については分かりません。複数のcfquery結果をAJAX呼び出しに戻す
ストアドプロシージャは内部的に多くのSELECTトランザクションを持ち、それぞれがcfstoredprocのcfprocresultの一部として取得されています。 cfprocresultが1つだけだった場合、AJAXに戻すことは簡単ですが、複数のcfprocresult結果を呼び出し元のAJAX関数に返すにはどうすればよいですか?
以下の擬似コード:
AJAX: ---------
$.ajax(
{
type: “post”,
url: "Contacts.cfc",
data: {
method: "retrieveCustomers",
username: this.DOMReferences.Name.val(),
},
dataType: "json",
success: function(objResponse){
if (objResponse.SUCCESS){
// rest of AJAX to process returned data here
Contacts.cfc ---------
<cfcomponent>
<cffunction name="retrieveCustomers" returntype="query">
<cfstoredproc datasource="#application.dsn_spoon#" procedure="proc_getUsers_paged">
<cfprocparam cfsqltype="cf_sql_varchar" value="#username#">
<cfprocresult name="qResult1" resultset="1">
<cfprocresult name="qResult2" resultset="2">
<cfprocresult name="qResult3" resultset="3">
</cfstoredproc>
// how do i return all 3 result sets back to calling AJAX function?
</cffunction>
</cfcomponent>
注:私はストアドプロシージャのロジックを変更するコントロールはほとんどありません。既存のWebページでは、AJAXを使用せずにcfstoredprocコンポーネントを呼び出している間に、ページ自体をリフレッシュしていました。代わりにAJAXを使うためにUIを書き直しています。
ありがとうございます!
私はあなたができることは、構造体を作成し、その中に結果セットを格納することだと思います。そして、SerializeJSON関数を使って構造体をJSONに変換し、レスポンスとしてAjaxに返します。 Ajaxレスポンスを受け取ったら、それを解析してさらに操作するだけです。 –
また、ajaxを使用してCFC関数を直接呼び出す場合、access = remoteを設定し、returntype = JSONを設定する必要があります。 –
@Keshavjha - ありがとうございます。今私はこのアプローチを理解していると思う。いつか試してみるよ! – maverick