JSP传递Servlet参数至JavaScript时遇Unexpected token :语法错误求助
解决Servlet传URL到JSP时的JavaScript语法错误
嘿,我来帮你搞定这个问题!你遇到的Uncaught SyntaxError: Unexpected token :错误,其实原因特别简单——你把字符串类型的URL赋值给JS变量时,没给它加引号!
看你这段代码:
var url=<%=urlData%>;
假设从Servlet传过来的urlData是类似https://example.com/page这样的URL,JSP编译后会变成这样的JS代码:
var url=https://example.com/page;
这在JS里完全是非法语法啊!字符串必须用单引号或双引号包裹,浏览器看到://里的冒号,就不知道这是什么鬼东西了,直接抛出语法错误。
怎么改?
给输出的URL加上引号就行,这里有两种靠谱的方式:
- 最简单的写法:直接在JSP表达式前后加双引号
<%String urlData=(String)request.getAttribute("urlDataFromServlet");%> <script type="text/javascript"> var url="<%=urlData%>"; // 重点就在这对双引号! $(document).ready(function() { // 你的后续代码,比如创建链接之类的 }); </script>
- 更安全的写法:用JSTL的
<c:out>标签
如果你的URL里有特殊字符(比如双引号、&符号),上面的写法可能又会出问题。这时候用JSTL的<c:out>就很省心,它会自动转义这些特殊字符,既避免语法错误,还能防XSS攻击:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <head> <script type="text/javascript"> var url="<c:out value='${urlDataFromServlet}'/>"; $(document).ready(function() { // 你的后续代码 }); </script>
(注意:用这个的话,得先确保项目里引入了JSTL的jar包哦)
额外提个醒
别忘了确认Servlet里确实把数据存到request属性里了,比如要写类似这样的代码:
request.setAttribute("urlDataFromServlet", "https://你的目标URL.com");
内容的提问来源于stack exchange,提问作者ramesh027
相关产品推荐
相关产品推荐

