标签: cffunction

冷融论的奇怪行为在外部功能中幸存?

我已经将ColdFusion编程了超过15年,但从未遇到过这种情况.这是复制行为的代码:

<cfset _run()>
<cffunction name="_run">
  <cfset variables.dataArray=ArrayNew(1)>
  <cfset local.data={
    area="profile"
  }>
  <cfset _append(data=local.data,field="name")>
  <cfset _append(data=local.data,field="phone")>
  <cfdump var="#variables.dataArray#" label="dataArray">
</cffunction>
<cffunction name="_append">
  <cfargument name="data" type="struct" required="yes">
  <cfargument name="field" type="string" required="yes">
  <cfdump var="#arguments#" label="arguments">
  <cfset arguments.data.field=arguments.field>
  <cfset ArrayAppend(variables.dataArray,arguments.data)>
</cffunction>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这就是我所做的:

  1. 在变量范围中引入数组以使其可全局访问
  2. 在本地范围内引用struct(local.data)
  3. 通过向_append函数调用数据来追加第一个字段项(名称)
  4. 以相同方式添加第二个字段项(电话)

此代码将导致以下输出:

转储输出

正如您所看到的,当您可能期望第一个索引应该具有field ="name"时,代码会生成具有重复条目的数组.正如您所看到的,第二次调用_append的数据值包含属性"field",其值为"name".从第一次调用函数开始,它似乎停留在参数范围内?这怎么可能.我认为参数范围被隔离到cffunction标签内?

但是,如果我用这个替换_append函数:

<cffunction name="_append">
  <cfargument name="data" type="struct" required="yes">
  <cfargument name="field" type="string" required="yes">
  <cfdump var="#arguments#" label="arguments">
  <cfset local.data=Duplicate(arguments.data)>
  <cfset local.data.field=arguments.field>
  <cfset ArrayAppend(variables.dataArray,local.data)>
</cffunction>
Run Code Online (Sandbox Code Playgroud)

它会给出以下输出:

输出转储2

正如您所看到的,在向其附加"field"之前复制arguments.data,可以解决问题.请注意,只需:

<cfset local.data=arguments.data>
Run Code Online (Sandbox Code Playgroud)

还不够.

有人可以解释参数范围的这种行为吗?

coldfusion scope arguments duplicates cffunction

5
推荐指数
1
解决办法
71
查看次数

如何检查是否收到或定义了参数?

我有一个具有以下参数的函数:

 <cffunction name="Agregar" access="public" returntype="any">
        <cfargument name="id_examen" type="numeric" required="yes" />
        <cfargument name="id_tema" type="numeric" required="yes" />
        <cfargument name="id_tipopregunta" type="numeric" required="yes" />
        <cfargument name="id_dificultad" type="numeric" required="yes" />
        <cfargument name="opciones_arreglo" type="array" required="no" />
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用cfif来说明当没有收到参数"opciones_arreglo"时该怎么做.我使用了一个名为的函数isDefined,但它不起作用.我只想让代码运行其他部分,但我得到了关于显而易见的事情的抱怨:

Element OPCIONES_ARREGLO is undefined in ARGUMENTS.


The error occurred in C:\www\htdocs\RHRR\componentes\bro\preguntas.cfc: line 24
22 :         <cfdump var="#Arguments#">
23 :         
24 :        **<cfif IsDefined(Arguments.opciones_arreglo)>**
25 :            
26 :             <cfinvoke method         = "RSAgregar"
Run Code Online (Sandbox Code Playgroud)

coldfusion cffunction

4
推荐指数
1
解决办法
3251
查看次数

如何从类型为“application/json”的 CFFUNCTION 创建输出?

我有一个 cfc,它创建一个包含 JSON 的输出字符串。有效负载很好,但接收它的人告诉我数据是以 text/html 形式传入的,而他的程序无法将其识别为有效,因为它需要是 application/json。

因此,我修改了 CFFUNCTION 语句中的参数,并构建了一个小型测试程序,其中显示:

 <cffunction name="Test" httpmethod="get" returntype="JSON" output="yes" access="remote">
    <cfset JSON='{"Test": "A"}'>
    <cfreturn JSON>
    </cffunction>
Run Code Online (Sandbox Code Playgroud)

但是,当我远程执行此 cfc 时,收到错误消息“测试函数返回的值不是 JSON 类型”。

这应该很容易,但我不知道需要做什么才能返回具有 application/json 类型的 JSON 字符串。

coldfusion json cffunction cfml

4
推荐指数
1
解决办法
1083
查看次数

在coldfusion函数中cfparam和cfargument之间的区别?

当在cffunction标签之后调用时,这两个代码块之间有什么区别:

<cfparam name="bork_bork_bork" default="false">

<cfargument name="bork_bork_bork" required="false" default="false">
Run Code Online (Sandbox Code Playgroud)

coldfusion cffunction coldfusion-9

2
推荐指数
1
解决办法
3702
查看次数

cfc文件中的Coldfusion FileUpload函数无法正常工作

我目前正在尝试使用cfc文件中的函数上传文件.当我<cffile action="upload">在同一页面上调用时,我可以让代码工作.但是,我想学习如何从cfc文件中的函数调用它.我相信我传递给<cffile>标签属性的参数存在问题,但我不确定.

这是我的HTML表单:

<form action="confirm.cfm" method="POST" enctype="multipart/form-data">
    First Name: <input type="text" name="FNAME" size="25" /> <br />
    Last Name: <input type="text" name="LNAME" size="30" /> <br />
    Upload Attachment File Here: <input type="file" name="fileUpload" 
                                    id="fileUpload" size="30" 
                                    onchange="PassFileName()" /> <br />

    <input type="hidden" name="fileName" id="fileName" /> <br />
    <input type="submit" value="submit" />
    <input type="reset" name="Reset Form" />
    <div id="filenamesection">
    </div>
</form> 
Run Code Online (Sandbox Code Playgroud)

以下是表单提交到confirm.cfm页面的代码

<cfif isDefined("Form.fileUpload")>
    <cfinvoke component="FileUploadExample"
            method="UploadFile"
            fileToUpload="#Form.fileUpload#"
            sizeMax="50"
            returnvariable="FileNameReturn">
    <cfelse>
            <cflocation url="index.cfm">
    </cfif>
    <h1> Thank for filling out …
Run Code Online (Sandbox Code Playgroud)

coldfusion file-upload cfc cffile cffunction

2
推荐指数
1
解决办法
1816
查看次数

从ColdFusion CFC调用Javascript函数

我有一个ColdFusion函数,用于检查表中是否存在记录,如果存在,则返回找到的行的数据.但是,如果记录不存在,我想让它调用我编写的JavaScript函数,并使用从JS函数返回的值继续处理CF函数.我知道CF是用Java编写的,所以我希望有一些东西可以执行这个任务.

基本上,从CF页面,步骤将是......

  1. 调用我的functions.cfc文件中的CF函数
  2. 在CF函数中,调用JavaScript函数并等待响应
  3. 使用JS函数返回的值继续处理CF函数.

有任何想法吗?感谢您的任何帮助!

javascript ajax coldfusion cfc cffunction

2
推荐指数
1
解决办法
2426
查看次数

处理可选参数:CFArgument与isDefined

我有一个问题cfargument.如果我在调用a时发送参数.cfc,那么将它定义为参数是否有任何好处?

<cffunction name="someFunction" ....>
    <cfargument name="myArg" required="no">
Run Code Online (Sandbox Code Playgroud)

或者我可以在函数内部使用IsDefined(),而无需定义参数?

<cffunction name="someFunction" ....>
   ...
   <cfif isDefined("arguments.myArg")>
      do something
   </cfif>
Run Code Online (Sandbox Code Playgroud)

我试过了,知道它们都有效.但是,定义参数和使用isDefined()之间有什么区别?这会影响效率吗?

coldfusion parameter-passing cffunction

2
推荐指数
1
解决办法
378
查看次数

如何从javascript调用cfm页面上的cffunction?

我想知道我是否可以拨打cffunction我的cfm页面?我有一个onClick按钮,应该调用cffunction同一页面上的那个.此外,我试图cfcomponent解决我的功能,但我收到此错误:

Invalid CFML construct found on line 94 at column 1.
ColdFusion was looking at the following text:

&lt;
The CFML compiler was processing:
&lt; marks the beginning of a ColdFusion tag.Did you mean LT or LTE?
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个:

<cffunction name="getRecords" access="remote">
    <script>
        alert('test');
    </script>
</cffunction>
Run Code Online (Sandbox Code Playgroud)

这是我的JS功能:

function getRecs(){
    try{
        location.href = 'myCFMpage.cfm?method=getRecords';
    }catch(err){
        alert('Error')
    }   
}
Run Code Online (Sandbox Code Playgroud)

我不确定这是否可能,我当前的代码没有触发警报cffunction.之所以我试图这样做是因为我cfquery在这个页面上有一个并且我想在用户点击按钮然后进行一些操作时从该查询中获取数据.如果有人能告诉我这是否可行或是否有更好的方法来解决这个问题,请告诉我.

javascript coldfusion cffunction

2
推荐指数
1
解决办法
1894
查看次数

在cffunction中设置对remote的访问权限包括application.cfm页面

当我设置cffunction对remote的访问权限 - 所以我可以通过AJAX调用它 - 该调用返回我在Application.cfm模板中的HTML.

有没有办法解决这个问题,还是我必须将HTML移出Application.cfm?

ajax coldfusion cffunction application.cfm

1
推荐指数
1
解决办法
360
查看次数

如何在没有参数的情况下调用无效的ColdFusion函数

我正在写一个ColdFusion函数,如下所示:

<cffunction name="checkStatusCode" output="false" access="private" returnType="void">
    <cfif result.Responseheader.Status_Code eq "400">
        <cfset isBadRequest = true>
    </cfif>
</cffunction>
Run Code Online (Sandbox Code Playgroud)

它都是无效的,不包含任何参数; 我理解如果它有参数并返回一些内容我会怎么称呼它; 我只是将代码放在<cfset>标签中.我只想运行该功能.我需要用什么标签?

coldfusion cffunction

0
推荐指数
1
解决办法
727
查看次数