Die Lösung für das Problem, dass der Ajax-Rückgabewert von jquery chinesischer verstümmelter Code ist: 1. [PrintWriter out = Response.getWriter()] wird nach dem entsprechenden korrekten Code platziert 2. jquery fügt den Parameter [content-type] hinzu; .
Die Betriebsumgebung dieses Tutorials: Windows7-System, JQuery3.2.1-Version, DELL G3-Computer.
Empfohlen: jquery-Video-Tutorial
Lösung für den Ajax-Rückgabewert von jquery, der chinesischer verstümmelter Code ist:
Bei der Verwendung von jquerys Ajax ist ein Problem aufgetreten. Die aus der Datenbank auf der Serverseite abgerufenen Daten sind nicht Es gibt ein Problem mit chinesischen verstümmelten Zeichen (es gibt keine verstümmelten Zeichen, wenn das Protokoll eingegeben wird), aber wenn es asynchron an den Kunden übertragen wird, erscheinen verstümmelte Zeichen. Die Serverseite wurde kodiert (UTF-8-Kodierung). Zuerst hatte ich immer den Verdacht, dass es sich um ein clientseitiges Problem handelte. Ich hatte beispielsweise auch den Verdacht, dass in der JQuery-AJAX-Toolfunktion contentType: „application/x“ fehlte -www-form-urlencoded; charset=utf. -8"
usw. contentType: "application/x-www-form-urlencoded; charset=utf-8"
, 等等问题。
结果都不是,纠结了几个小时,后来发现,原来代码还是出在服务器端,疏忽了。
服务器端代码:
/** * 异步(返回json数据格式)(支持分页) * @param mapping * @param form * @param request * @param response * @return * @throws AppException */ public ActionForward queryErrorCodeRecordByPage(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { Integer currentpage = Integer.parseInt(request.getParameter("currentpage")) ; Integer pagesize = Integer.parseInt(request.getParameter("pagesize")) ; try { List ListByPage = this.errorCodeRecordFacade.queryErrorCodeRecordByPage(currentpage, pagesize); JSONArray json = JSONArray.fromObject(ListByPage); System.out.println("JSONArray数据---" + json.toString() ); request.setCharacterEncoding("utf-8"); //这里不设置编码会有乱码 response.setContentType("text/html;charset=utf-8"); response.setHeader("Cache-Control", "no-cache"); PrintWriter out = response.getWriter(); //输出中文,这一句一定要放到response.setContentType("text/html;charset=utf-8"), response.setHeader("Cache-Control", "no-cache")后面,否则中文返回到页面是乱码 out.print(json.toString()); out.flush(); out.close(); } catch (Exception e) { log.error("查询数据出错", e); } return null ; }
客户端的代码:
//异步 根据分页来取错误码历史 数据 function search_errorCodeRecord(currentpage,pagesize) { $.ajax({ async :true, url: "<%=request.getContextPath()%>/errorCodeRecord/queryErrorCodeRecordByPage.do", type: "post", data: { currentpage: currentpage, pagesize:pagesize}, // dataType : "json", //这里已经定义数据格式 contentType: "application/x-www-form-urlencoded; charset=utf-8", success:function(data) { alert(data); // var json=eval('('+data+')'); // jquery调用时会检测到,从而直接把返回格式当做json处理,所以再转化会报错。 var json=eval(data); resolv_json(json) ; } }); } //解析json数组,动态拼接到白色Div中 function resolv_json(json) { for(var i=0;i<json.length;i++) { // alert(json[i].boss_resultinfo); var operate_state = "新增了" ; if(json[i].operate_state == "2" ) { operate_state= "修改了" ; } if(json[i].operate_state == "3" ) { operate_state= "删除了" ; } var p=$("<p></p>"); var span1=$("<span></span>"); var span2=$("<span></span>"); var span3=$("<span></span>"); var span4=$("<span></span>"); var times = json[i].operate_time.time; // alert(json[i].operate_time.time); //时间格式是个JSON对象 // alert(getLocalTime(times)); span1.html(getLocalTime(times)); span2.html(json[i].operate_people); span3.html(operate_state); span4.html(json[i].businessname +" 错误码"); p.append(span1).append(span2).append(span3).append(span4); $("#whiteDiv").append(p); } } //时间戳转化为时间 function getLocalTime(nS) { return new Date(parseInt(nS)).toLocaleString().replace(/:\d{1,2}$/,' '); } <div id="whiteDiv"> </div>
总结如下:
1. PrintWriter out = response.getWriter();
一定要放在
request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8");
编码的后面(原因很简单,你懂的。)
2. jquery 加不加 content-type