作者:黑旦儿 | 来源:互联网 | 2023-09-17 11:05
var name &#61; &#39;<%&#61;session.getAttribute("name")%>&#39;;alert(name);
这里直接alert了<%&#61;session.getAttribute(“name”)%>&#xff0c;哈哈哈哈卧槽&#xff0c;太真实了。
原因&#xff1a;<%&#61;%>的方式是表示中间的代码为后台代码&#xff0c;不是在js中获取后台变量的值&#xff0c;而且这个后台代码是由后台页面对象执行&#xff0c;然后用结果替换<%&#61;%>后和html代码一起发送到前台。&#xff08;<%%>里面的代码根本没有到达后端给servlet执行&#xff09;
明白原理之后&#xff0c;在js文件中这种方式失败应该是可以理解的了&#xff0c;js文件是由浏览器输出html时发现js文件节点后才加载的&#xff0c;那时后台页面对象的生存期已经结束&#xff08;html代码发送后后台page对象就析构了&#xff09;&#xff0c;当然无法执行后台代码&#xff0c;所以js文件中不可能支持这种方式。&#xff08;后端生命周期已经结束了&#xff0c;js属于浏览器端&#xff0c;浏览器端是不能获得到服务器端的对象的&#xff0c;只有Java和JSP文件能够获得&#xff09;。
解决方法&#xff1a;用ajax拿吧。为什么ajax就能够执行后端呢&#xff1f;因为ajax重新用Url请求了一遍后端程序。