首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CFINVOKE将结构传递给冷融CFC?

如何使用CFINVOKE将结构传递给冷融CFC?
EN

Stack Overflow用户
提问于 2012-07-18 07:30:29
回答 4查看 3.4K关注 0票数 0

我有一个CFC文件,它处理我从应用程序中发送的所有电子邮件(使用Coldfusion8)。

我使用CFINVOKE调用这个CFC内部的相应函数,并传递了一个包含所有用户数据的结构,如下所示:

代码语言:javascript
复制
<cfscript>  
var User.data = {};
    User.data.name = "John Doe";
    User.data.email = "john@doe.com";
    ...
</cfscript>     
// call mailer
<cfinvoke component="mailer_user" method="say_hi">
    <cfinvokeargument name="userData" value="#User.data#">
</cfinvoke>

在我的mailer.cfc里面

代码语言:javascript
复制
<cffunction name="say_hi" access="public" output="false">
    <cfargument name="userData" type="struct" required="true" /> 
 ....

由于某些原因,这现在失败了,只有将字段作为cfargument单独传递才能使其工作,这是一个痛苦的问题,因为我正在传递大量数据。

argumentCollection.问题:我如何使用使其工作

即使我这样做:

代码语言:javascript
复制
 <cfinvoke component="mailer_user" argumentcollection="#User.data#" method="say_hi"></cfinvoke>

还是一事无成。我在cfinvoke之前和之后设置输出标志,以及在"say_hi“函数中输入和输出。我只会在CFINVOKE之前拿到国旗。

附带注意:这一切都是通过AJAX完成的,如果我的CFC在某个地方有错误,我只能返回success="false“。我只在系统上远程工作,所以无法在CFADMIN中设置AJAX调试

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-18 08:02:47

当我输入上面的评论时,我意识到问题可能是什么。

您正在将一个结构传递给您的函数。您通过User.data,其中有名字,电子邮件,等等,作为键在该结构。这些键需要匹配函数中的参数。

代码语言:javascript
复制
<cffunction name="say_hi" access="public" output="false">
    <cfargument name="name" type="struct" required="true" /> 
    <cfargument name="email" type="struct" required="true" /> 
    <cfargument name="blah" type="struct" required="true" /> 
    <cfargument name="etc" type="struct" required="true" /> 

如果要将结构作为参数传递,则需要有一个user.userData作为用户数据的结构,并且您的函数应该是

代码语言:javascript
复制
<cffunction name="say_hi" access="public" output="false">
    <cfargument name="userData" type="struct" required="true" /> 

当您将集合作为argumentCollection传递时,您应该执行argumentCollection="#user#",以便userData部件与函数中的cfargument匹配。

像泥一样干净?

票数 3
EN

Stack Overflow用户

发布于 2012-07-18 07:50:05

我认为你应该保持cfscript风格

代码语言:javascript
复制
// call mailer
mailUser = createObject("component", "mailer_user");    // or new mailer_user(); for CF9+
mailUser.say_hi(User.data);

如果它不起作用,它就会在代码中的其他地方。尝试查看错误日志。

票数 2
EN

Stack Overflow用户

发布于 2012-07-19 07:14:42

您应该将变量映射到您传递的数据,然后发送结构就没有问题了。这样做

代码语言:javascript
复制
<cfset objMailer = createObject("component","mailer_user") />

<cfset objMailer.say_hi(userData:user.data)/>

即使在CF7中也是如此。

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

https://stackoverflow.com/questions/11536363

复制
相关文章

相似问题

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