missing ) in parenthetical 这是javascript里调用ajax的回调请求里常看到的错误。
做了一个简单的例子,就是从jsp页面中接收Json数据,结果用Firebug调试时,控制台报出这个错误:missing ) in parenthetical
看firebug的提示信息,以为是js的语法错误,可是怎么修改,发现还是不管用,事实上错误不是由于本地的语法错误而是服务器返回错误的json数据而已,在这种情况下可以用firebug跟踪服务器端的相应来找到相应的错误根源。
如果服务器端是字符串拼接成Json形式的返回字符串,则应先设置ContentType为Json格式,如下:
response.setContentType("application/json; charset=UTF-8");
之后输出:out.println(result);
或者是下面的方法:把Map自动转换为Json数据。
从Google中搜索一下,主要在英文网站发现有相同问题,分析就是接收的Json数据不合法,格式不正确.仔细看看Firebu控制台的错误和jsp页面中生成的Json数据的过程,原来是我的jsp页面中含有网页其他代码,例如
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head></head>等等 网页中,.Ext将这些信息当成Json数据接收,所以出现了上面的错误,还有这些
out.println("**********");与接收数据无关的打印输出语句中打印的信息都当成Json数据.这些数据都是不合法的Json格式.把这些不是要返回给Ext的数据去除,问题解决.估计也有别的原因可以导致这个错误,应该也是Json数据格式的问题.
check.jsp代码
<%
try {
Map m = new HashMap();
String username = (String) request.getParameter("username");
String password = (String) request.getParameter("password");
if (username.equals("admin") && password.equals("admin")) {
m.put("msgBack", "ok");
} else {
m.put("msgBack", "帐号或密码错误,请重新登录!");
}
m.put("success", true);
JSONObject result = JSONObject.fromObject(m);
response.getWriter().println(result);
} catch (Exception e) {
e.printStackTrace();
}
%>