通过cfajaxproxy调用cffunction时未传递变量

问题描述

| 我发现之前曾问过这个问题,但其中包含错误的示例,没有真实答案,因此我在这里再次提出问题。首先是代码: 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>
氟氯化碳:
<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中,所以我知道它已被正确调用,我根本无法将值传递给它(无论是来自变量还是纯字符串)。 在此先感谢您的帮助。     

解决方法

在您的JavaScript中,您正在使用单个参数(
proxy.purgeItemDirectly( objectName )
)调用函数。您的CFC定义了两个参数:
container
objectName
。因此,您的JavaScript会将objectname参数传递到CFC的容器参数中。您需要确保同时传入两个参数,或者更改CFC中参数的顺序以匹配您对JavaScript调用的期望。     ,如果您支持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