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)。

你有两种方法可以处理这个问题:

  1. 通过远程调用构建所需表单(或元素)的 .cfm 文件来加载所需的表单(或元素)。您可以使用$("{place form will be displayed}").load("{url to .cfm page})并且 jQuery 将发出 HTTP 请求并将结果加载到与选择器匹配的 DOM 元素中。

  2. 更改您的 CFC 以返回查询并使用 JavsScript 填充客户端上的选择框。(这就是我会做的)

您的代码如下所示:

<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>

然后,您可以使用以下内容加载该数据(根据语法看起来像 Prototype):

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' 告诉 ColdFusion 以 JSON 格式返回结果。

您只需要一个 JS 处理程序来获取该数据并使用它来填充 SELECT 框。

于 2013-01-26T00:20:02.987 回答