点击按钮提示my()未定义:JSP变量转JS弹窗报错问题
解决「Uncaught Reference Error: my() is not defined」错误及JSP Session变量获取问题
错误原因分析
- JSP空指针异常:如果
session.getAttribute("jsonData")返回null,直接调用toString()会抛出空指针异常,导致后续JavaScript代码(包括my()函数)无法正常解析执行。 - JavaScript语法疏漏:
const jso="<%=resp%>"末尾缺少分号,虽JavaScript有自动分号插入机制,但可能引发意外的语法解析问题。
修复步骤
1. 处理JSP端空值情况
先判断session中的jsonData是否存在,避免空指针异常:
<% String resp = ""; if(session.getAttribute("jsonData") != null){ resp = session.getAttribute("jsonData").toString(); } %>
2. 修正JavaScript语法并确保函数正常定义
补充分号,保证变量和函数定义逻辑完整:
<input type="button" class="btn" value="Place Order" onclick="my()"> <script type="text/javascript"> <% String resp = ""; if(session.getAttribute("jsonData") != null){ resp = session.getAttribute("jsonData").toString(); } %> const jso="<%=resp%>"; // 补充分号 function my(){ alert(jso); } </script>
3. 额外优化:转义特殊字符
如果jsonData包含引号、换行等特殊字符,直接赋值会破坏JavaScript语法,可借助工具类转义:
const jso="<%=org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(resp)%>";
若未引入Apache Commons Lang,可手动转义关键字符,比如将双引号替换为\"、换行符替换为\\n。
内容的提问来源于stack exchange,提问作者Naved Ahmed
相关产品推荐
相关产品推荐

