<cfcontent type =“text / x-javascript”>和Ajax </cfcontent>

时间:2013-01-25 23:55:35

标签: ajax coldfusion content-type cfc

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

谢谢, Kefang

1 个答案:

答案 0 :(得分:7)

您没有从CFC返回任何内容(并且您无法在远程调用的函数内运行JavaScript)。

您有两种方法可以解决这个问题:

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

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

  3. 您的代码如下所示:

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