1

CFC ファイルで Ajax を使用しています。Ajax から呼び出している関数から結果を取得できません。デバッグ メッセージ (Alert()) を設定しましたが、表示されません。なにか提案を?

function getDelegateChartAcct(LocFund){
   alert("#Arguments.PIUniversalID#");
   alert($F("DelegateFund"));                                                                                                                                                                                                                    

  new Ajax.Request( "?method=displayDelegateChartAcct",
            {
              parameters : {
                            PIUniversalID: "#Arguments.PIUniversalID#",
                            PILocFund: $F("DelegateFund")                                                                                
                            },
                            method : "post"
                             }
               );
     }

     <cffunction name="displayDelegateChartAcct" access="remote" output="true" 
      returntype="void">
          <CFArgument name="PIUniversalID" type="string" required="true" />
          <CFArgument name="LocFund" required="true" type="String" />

      <CFSET var chartacctlist = runChartAcctDelegationQuery 
                  (#Arguments.PIUniversalID#, #Arguments.LocFund#)>

        <CFContent type="text/x-javascript">               
          alert(“Hi”);     
          //      delegateChartAcctList();
          //      $("DelegateChartAcct").
           //     <CFOutput query="chartacctlist">           
            //     $("DelegateChartAcct").insert( new Element(
                    "option", { value : "#JSStringFormat( chart_acct )#", selected : 
            //        "selected" } ).update( "#JSStringFormat( chart_acct )#" ) );                                                        
            //                            </CFOutput>


            </cffunction>   

ありがとう、ケファン

4

1 に答える 1

7

CFC からは何も返されません (また、リモートで呼び出している関数内で JavaScript を実行することもできません)。

これを処理するには 2 つの方法があります。

  1. 必要なフォーム (または要素) を作成する .cfm ファイルをリモート呼び出しして、必要なフォーム (または要素) を読み込みます。$("{place form will be displayed}").load("{url to .cfm page})を使用すると、jQuery は HTTP リクエストを作成し、結果をセレクターに一致する DOM 要素にロードします。

  2. クエリを返すように CFC を変更し、JavasScript を使用してクライアント側の選択ボックスに入力します。(これは私がすることです)

コードは次のようになります。

<cffunction name="displayDelegateChartAcct" access="remote" output="true" returntype="query">
      <cfargument name="PIUniversalID" type="string" required="true" />
      <cafrgument name="LocFund" required="true" type="String" />

  <cfset var chartacctlist = runChartAcctDelegationQuery (#Arguments.PIUniversalID#, #Arguments.LocFund#)>
    <cfreturn chartacctlist />
</cfcomponent>

次に、次を使用してそのデータをロードできます (構文に基づくプロトタイプのように見えます)。

new Ajax.Request( "?method=displayDelegateChartAcct&returnFormat=json",
    {
        parameters : {
            PIUniversalID: "#Arguments.PIUniversalID#",
            PILocFund: $F("DelegateFund")                                                                                
        },
        method : "post",
        onSuccess: function(response) {
                // code in here will populate select
        }
     }
 );

「returnFormat=json」は、結果を JSON として返すように ColdFusion に指示します。

そのデータを取得し、それを使用して SELECT ボックスに入力するには、JS ハンドラーが必要です。

于 2013-01-26T00:20:02.987 に答える