我在 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 方法来获得更多控制,但只是想了解为什么这不起作用。
总结评论:
当
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
作用域变量。当用户单击按钮时,我还会将该值保存到数据库中,以便在用户下次登录应用程序时保存设置。