Javascript 通过cfajaxproxy调用cfa函数时未传递变量

Javascript 通过cfajaxproxy调用cfa函数时未传递变量,javascript,ajax,coldfusion-9,cfc,Javascript,Ajax,Coldfusion 9,Cfc,我发现这个问题被问到了,但它包含了不好的例子,没有真正的答案,所以我在这里再次问它。首先是守则: 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

我发现这个问题被问到了,但它包含了不好的例子,没有真正的答案,所以我在这里再次问它。首先是守则:

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>

var proxy=新代理();
函数clearCache(objectName){
setCallbackHandler(purgeResultsHandler);
setErrorHandler(myErrorHandler);
警报(对象名称);
proxy.purgeItemDirectly(objectName);
}
var purgeResultsHandler=函数(res){
警报(res);
}
var myErrorHandler=函数(statusCode,statusMsg){
警报('状态:'+statusCode+','+statusMsg);
}
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中的CFF函数时,它就不存在了。我插入了文本值以返回到cfc中,因此我知道它被正确调用,我无法将值传递给它(无论是来自变量还是纯字符串)


提前感谢您的帮助。

在javascript中,您使用单个参数(
proxy.purgeItemDirectly(objectName)
)调用函数。CFC定义了两个参数:
container
objectName
。因此,javascript将objectname参数传递到CFC的容器参数中。您需要确保传入这两个参数,或者更改CFC中参数的顺序,以符合您对JavaScript调用的期望。

如果您支持IE浏览器,我想特别补充一点 下一行的代码将在IE上中断,并显示标准错误消息(这不有用)

确保将var名称更改为其他名称,如:

var proxy_ = new proxy();
我在试图解决自己的问题时遇到了你的问题,我发现下面的参考资料很有用

参考:

var proxy_ = new proxy();