具体流程:转入到jsp界面时会加载ajax,ajax转到url时传带hide在jsp界面的值titleString,其来源见下面的代码。
String title=new String("\"日志模块访问统计分析图\""); String subtitle=new String("\""+df.format(startDateTemp).toString()+" 至 "+df.format(endDateTemp).toString()+"各模块访问饼状图"+"\""); titleMap.put("title", title); titleMap.put("subtitle", subtitle); yString=yAxisMap.toString(); titleString=titleMap.toString();
此处,在加中文字符串时必须要用\"引号的转义字符串括起,其格式应该如下:{title="日志模块访问统计分析图", subtitle="当日服务器及各模块访问折线图"},而不是{title=日志模块访问统计分析图, subtitle=当日服务器及各模块访问折线图}
$(function(){ $.ajax({ type: ‘POST‘, dataType: ‘JSON‘, url: "logStatistic/statisticLog.action?titleString="+$("#titleString").val(), success : function(result){ } }); });
ajax进入action中时,需用request.getParameter("titleString")取到titleString,然后titleString.getBytes("iso-8859-1"), "UTF-8")进行编码处理。此处可以看出前台界面的编码方式。但是,在jsp界面中,我已用pageEncoding="UTF-8"确定,为什么此处要为iso-8859-1?我用谷歌F12观察前台界面数据是没有乱码的。
那应该是后台action中接收的编码方式是iso-8859-1。
在action中打断点,观察到若用Map temp1Map = JSONObject.fromObject(titleString)得到为{title="??¥????¨????è??é?????è???????????", subtitle="2014?1′03???25??¥ è?3 2014?1′03???26??¥????¨????è??é??é¥???????"},是乱码。所以此处要求编码方式的一些处理。即,titleString=request.getParameter("titleString"),titleString.getBytes("iso-8859-1"), "UTF-8"),将其转为UTF-8格式。
request 为protected HttpServletRequest request;// 请求的request对象。
public String statisticLog() { Map tempMap = JSONObject.fromObject(yString); tempMap.putAll(JSONObject.fromObject(xString)); try { titleString = new String(request.getParameter("titleString").getBytes("iso-8859-1"), "UTF-8"); tempMap.putAll(JSONObject.fromObject(titleString)); } catch (Exception e) { e.printStackTrace(); } chartMap=tempMap; chartMap.put("timeType", timeType); return SUCCESS; }
网上还有使用escape(或encodeURI)的方法的,我尚未验证,贴出地址:http://www.cnblogs.com/qiuyi21/articles/1089555.html,感觉比较麻烦。