<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
</head>
<script type="text/javascript">
function change(tmp)
{
var param=encodeURIComponent(tmp);
alert(param);
var req="<%=basePath%>to.jsp?req=";
window.location.href=req;
}
</script>
</head>
<body>
<a href="javascript:change('{'className':'Overlook','methodName':'overlook',params:[]}')">跳转</a>
</body>
</html>
如果change不带参数则可以正常调用,但是调用change时需要传参,所以会报出Uncaught SyntaxError: Unexpected identifier,该如何处理呢?求解
很明显,change(tmp) 函数的参数 tmp 应该是字符串,而在你的代码中,调用时传入的参数是:
'{'className':'Overlook','methodName':'overlook',params:[]}'上面的“字符串”在第一个“{”时就已经结束了,导致 className 及之后的字符成为了 unexpected identifier,因而报错。
JavaScript 中,表示字符串的引号不能与字符串内的引号混用,所以要使用不同的符号:
"{'className':'Overlook','methodName':'overlook',params:[]}"考虑到在 HTML 中嵌入 JavaScript 代码,还要注意替换特殊符号(双引号):
"{'className':'Overlook','methodName':'overlook',params:[]}"不过,按照规范,最好将 JavaScript 字符串内的特殊符号(引号)替换为对应的转义字符:
'{\'className\':\'Overlook\',\'methodName\':\'overlook\',params:[]}'或者:
"{\'className\':\'Overlook\',\'methodName\':\'overlook\',params:[]}"