jquery的ajax返回值为中文乱码的解决办法:1、【printwriter out = response.getwriter()】放在相关正确代码后面;2、jquery加【content-type】的参数。
本教程操作环境:windows7系统、jquery3.2.1版本,dell g3电脑。
推荐:jquery视频教程
jquery的ajax返回值为中文乱码的解决办法:
用jquery的ajax,遇到个问题,服务器端从数据库取到的数据没有出现中文乱码问题(日志打出来是没有乱码的),但是异步传到客户的时候却出现了乱码。 服务器端已经编码过了(utf-8编码)。开始一直怀疑是客户端的问题,比如客户端和服务器端编码不一致啊,也怀疑是不是jquery的ajax工具函数中少配了 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的参数 都不影响。
contenttype: "application/x-www-form-urlencoded; charset=utf-8",
相关免费学习推荐:javascript(视频)
以上就是jquery的ajax返回值为中文乱码怎么办的详细内容。
