【问题标题】:variable not being passed when making a call through cfajaxproxy to a cffunction通过 cfajaxproxy 调用 cffunction 时未传递变量
【发布时间】:2023-03-23 02:45:01
【问题描述】:

我发现这个问题被问到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 的文本值,所以我知道它被正确调用,我根本无法将值传递给它(来自变量或只是一个纯字符串)。

提前感谢您的帮助。

【问题讨论】:

    标签: javascript ajax coldfusion-9 cfc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果您支持 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

      【讨论】:

        猜你喜欢
        • 2012-03-30
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 2011-10-19
        • 2014-12-25
        • 2015-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多