首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过cfajaxproxy调用cffunction时,未传递变量

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

Stack Overflow用户
提问于 2011-05-25 07:00:34
回答 2查看 779关注 0票数 0

我发现这个问题问了previously,但它包含了糟糕的例子,没有真正的答案,所以我在这里再问一次。首先是代码:

HTML:

代码语言:javascript
复制
<td><input type="button" name="clear_#get_images.prdt_img_rel_ID#_cache" value="Clear Cache" onClick="clearCache('#get_images.images_name#');"/></td>

代理:

代码语言:javascript
复制
<cfajaxproxy cfc="/cfc/cloudfiles" jsclassname="proxy">

Javascript:

代码语言: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:

代码语言:javascript
复制
<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中的函数,它就不存在了。我插入了文本值以返回到cfc中,所以我知道它被正确调用了,我只是不能向它传递一个值(无论是从一个变量还是一个普通字符串)。

提前感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-06 22:36:05

在javascript中,调用函数时只有一个参数(proxy.purgeItemDirectly( objectName ))。您的CFC定义了两个参数:containerobjectName。因此,您的javascript将您的objectname参数传递给了CFC的容器参数。您需要确保同时传入两个参数,或者更改CFC中参数的顺序,以匹配您期望从JavaScript调用中得到的结果。

票数 1
EN

Stack Overflow用户

发布于 2011-09-09 06:10:22

我想再增加一件事,特别是如果你支持IE浏览器,你在下面一行的代码将在IE上中断并显示标准错误消息(这是没有用的)

代码语言:javascript
复制
var proxy = new proxy();

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

代码语言:javascript
复制
var proxy_ = new proxy();

我在尝试解决自己的问题时遇到了你的问题,我发现下面的参考资料很有用

参考:http://www.coldfusionjedi.com/index.cfm/2008/7/1/IE-issue-with-AjaxProxy

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6117865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档