Coldfusion 应用范围变量

问题描述 投票:0回答:1

我在 Application.cfm 文件中定义了一个应用程序范围变量

<!--- Application.cfm --->
<cfset application.calendar = "true">

然后在我的 main.cfm 文件中,我有一个按钮,用户单击该按钮将调用 cfc 定义的方法,该方法会将 application.calendar 值更新为 false。

主.cfm

$.get('./utility.cfc?method=setVal',function(){
    console.log(<cfoutput>"#application.calendar#"</cfoutput>);
})

这是cfc函数

<cfcomponent>
    <cffunction name="setVal" access="remote" returntype="any">
    <cftry>
            <cfset application.calendar = 'false'>
         
        <cfcatch >
            <p>Error on logout,try again later.</p><cfabort>
        </cfcatch>
    </cftry>
    <cfreturn application.calendar>
    </cffunction>
</cfcomponent>

当控制台日志运行时,application.calendar 的值仍然为 true。只是需要一些帮助来理解为什么会这样。我看到一些帖子建议使用 application.cfc 方法来获得更多控制,但只是想了解为什么这不起作用。

javascript coldfusion
1个回答
0
投票

总结评论:

main.cfm
渲染到浏览器时,您已经写出了渲染时
application.calendar
的值。由于
Application.cfm
中的值为
true
,因此页面上渲染的 JavaScript 将始终为
true

您的

main.cfm
CFML 代码:

$.get('./utility.cfc?method=setVal',function(){
    console.log(<cfoutput>"#application.calendar#"</cfoutput>);
})

渲染的 HTML:

$.get('./utility.cfc?method=setVal',function(){
    console.log("true");
})

但是当页面重新加载时,

application.calendar
的值将再次设置为
true
。更改为
Application.cfc
并在
onApplicationStart()
中设置此值将有助于避免此问题。

对于@rrk 的观点,您需要记录来自

get()
的响应,而不是渲染页面时应用程序变量的值。

对于@Dan 来说,

application
作用域变量是应用程序生命周期的全局变量。所有用户都会看到这个值,并且允许每个用户更改它会影响所有其他用户渲染页面。

如果这意味着“用户设置”,那么该值应该是一个

session
作用域变量。当用户单击按钮时,我还会将该值保存到数据库中,以便在用户下次登录应用程序时保存设置。

© www.soinside.com 2019 - 2024. All rights reserved.