ColdFusion Application Scope变量更新后未生效问题咨询
为什么更新Application变量后控制台输出还是旧值?
核心原因是服务器端CFML代码和前端JS的执行时机完全脱节:
- 当用户访问
main.cfm时,服务器会先执行页面内所有CFML代码,包括<cfoutput>"#application.calendar#"</cfoutput>,此时application.calendar的值是true,所以最终发送给浏览器的JS代码已经被硬编码成:$.get('./utility.cfc?method=setVal',function(){ console.log("true"); }) - 后续用户点击按钮触发AJAX请求,确实会调用CFC的
setVal方法把application.calendar改成false,但这时浏览器里的JS代码已经是静态文本了,回调函数里的console.log输出的还是页面加载时就确定的"true",和修改后的Application变量完全无关。
修复方案(无需切换到Application.cfc)
直接利用CFC方法的返回值——setVal已经返回了修改后的application.calendar值,把AJAX回调改成接收这个返回值即可:
修改main.cfm的代码:
$.get('./utility.cfc?method=setVal', function(updatedValue){ console.log(updatedValue); })
这样点击按钮后,控制台会输出CFC返回的false,也就是最新的Application变量值。
直观验证方式
打开浏览器的「查看页面源代码」功能,找到这段JS代码,你会看到console.log里的内容已经是"true"——这就是问题的直接证明:服务器渲染页面时就把值写死了,后续AJAX修改不会影响这段静态代码。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

