我在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
答案 0 :(得分:7)
您没有从CFC返回任何内容(并且您无法在远程调用的函数内运行JavaScript)。
您有两种方法可以解决这个问题:
通过远程调用构建所需表单(或元素)的.cfm文件来加载所需的表单(或元素)。您可以使用 $(“{place form will display}”)。load(“{url to .cfm page})和jQuery将发出HTTP请求并将结果加载到DOM元素中匹配选择器。
更改您的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框。