我发现这个问题是previously,但它包含了不好的例子而没有真正的答案,所以我在这里再问一遍。首先是代码:
HTML:
<td><input type="button" name="clear_#get_images.prdt_img_rel_ID#_cache" value="Clear Cache" onClick="clearCache('#get_images.images_name#');"/></td>
代理:
<cfajaxproxy cfc="/cfc/cloudfiles" jsclassname="proxy">
Javascript:
<script type="text/javascript">
var proxy = new proxy();
function clearCache( objectName ) {
proxy.setCallbackHandler( purgeResultsHandler );
proxy.setErrorHandler( myErrorHandler );
alert(objectName);
proxy.purgeItemDirectly( objectName );
}
var purgeResultsHandler = function ( res ) {
alert( res );
}
var myErrorHandler = function(statusCode, statusMsg) {
alert('Status: ' + statusCode + ', ' + statusMsg);
}
</script>
CFC:
<cffunction name="purgeItemDirectly" access="remote" returntype="string" output="false">
<cfargument name="container" type="string" required="false" default="content" />
<cfargument name="objectName" required="true">
<cfset var res = '' />
<cfhttp method="DELETE" charset="utf-8" url="#variables.cdn_url#/#_encodeContainerName(arguments.container)#/#_encodeObjectName(arguments.objectName)#">
<cfhttpparam type="header" name="X-Auth-Token" value="#variables.auth_token#" />
<cfhttpparam type="header" name="X-Purge-Email" value="#Application.debuggingEmail#" />
</cfhttp>
<cfswitch expression="#ListFirst(cfhttp.statusCode, " ")#">
... code to iterate through responses ...
</cfswitch>
<cfreturn res >
</cffunction>
如您所见,我有一个警告来检查JS中的objectName。此时objectName确实存在。但是,一旦我进入cfc的cffunction,它就不存在了。我已插入文本值以返回到cfc中,因此我知道它被正确调用,我根本无法将值传入其中(无论是从变量还是只是一个普通的字符串)。
提前感谢您的帮助。
答案 0 :(得分:1)
在您的javascript中,您使用单个参数(proxy.purgeItemDirectly( objectName )
)调用该函数。您的CFC定义了两个参数:container
和objectName
。所以你的javascript将你的objectname参数传递给CFC的容器参数。您需要确保传入两个参数,或者更改CFC中参数的顺序以匹配您对JavaScript调用的期望。
答案 1 :(得分:0)
如果您支持IE浏览器,我想特别添加1件事 以下行中的代码将在IE上出现标准错误消息(这是无用的)
var proxy = new proxy();
确保将var名称更改为其他名称,如:
var proxy_ = new proxy();
我在尝试修复自己的问题时遇到了您的问题,我发现下面的参考资料很有用
参考:http://www.coldfusionjedi.com/index.cfm/2008/7/1/IE-issue-with-AjaxProxy