jQuery Ajax传值到Servlet出现乱码问题的解决方法


Posted in Javascript onOctober 09, 2016

最近在学jquery ui,在做一个小功能的时候需要将前台的值获取到,通过Ajax传递给Servlet,然后再在返回数据结果,但是在Servlet接受参数的时候,通过后台打印,发现接受乱码,代码示例如下:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String testword=request.getParameter("criticalword")
System.out.println(testword);
out.println(testword);
out.flush();
out.close();
}

我只用的是ajax的get方式传递的,所以上面也只截取了doGet()方法的代码,那么对于乱码,会有哪几种情况呢,我谈一下我的看法,具体每个阶段的方法我会以代码和截图的方式给出:

1.保证jsp网页没有乱码

首先得确保你的JSP页面没有乱码,具体代码如下:

%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8" %

这句话添加在网页最顶部就可以了,补充下page指令的两个参数的具体含义,很多人也许会用,但是我觉得还是有必要了解下的:

a.pageEncoding参数

pageEncoding属性用来指定JSP页面的字符编码,默认为ISO-8859-1,由于该方法不支持中文,所以,如果要指定JSP页面的字符编码方式支持中文编码,则需要将page指令的pageEncoding属性设置为"GB2312"、"GBk"或"UTF-8"。

b.contentType参数

contentType属性用来指定JSP页面输出内容的类型和字符编码方式。属性值中的内容类型部分可以为text/html(纯文本HTML页面)、text/plain(纯文本文件)等。

2.保证jQuery Ajax在传递前没有乱码

下面贴出的Ajax代码,我要给后台传递的参数是get类型,参数名叫criticalword,代码如下:

$('#search').autocomplete({
source:function(request,response){

 alert('看看在传递前有没有乱码'+request.term);
$.ajax({
type:'get',
url:'/SGAME/servlet/IndexSearchItems',
data:{criticalword:encodeURI(request.term)},
success:function(response,status,xhr){
alert(response);
}
});
},
delay:100
})

正如我代码红色所标记的,你在传递前先alert()弹窗,测测看是不是你的js文件已经乱码,如果是的话,解决方法:

1.回查上一步是不是没解决

2.js文件编码问题:在资源管理器用记事本打开js,然后另存为,在编码里选择utf-8

如下图:

jQuery Ajax传值到Servlet出现乱码问题的解决方法

当你的第一个弹窗没有乱码,那说明在传给Servlet前没有问题,那个在进入下一步前先做一个准备工作,如上述红色代码所示,先给参数转码:

criticalword:encodeURI(request.term)

  这个转码是为了防止在Servlet中出现接收乱码的函数,形式为:encodeURI(param)

3.保证Servlet在接受Ajax的参数时(request)没有乱码

到了这一步说明你离成功不远了,只需要先request和resopnse设置编码的方式,然后再解码即可,doGet代码如下:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String testword=URLDecoder.decode(request.getParameter("criticalword"),"utf-8");
System.out.println(testword);
out.println(testword);
out.flush();
out.close();
}

  其中主要有三个要点:

a.response.setContentType():用于设置响应回jsp或者Ajax的字符编码。

b.request.setCharacterEncoding():用于设置接收请求的响应编码。

c.URLDecoder.decode():此函数需要先导入java.net包,用于对Ajax的编码进行解码。

完成以上三个步骤后,你可以像我一样,在返回前加一个System.out.println(yourParam)试试,如果是中文那就没问题啦

4.保证Servlet在响应(response)给jsp没有乱码

 其实在第三部的要点b设置好后,其实返回给html或jsp就应该之中文了。

注:如果你用的是post方法,直接在Ajax里加上contentType:application/x-www-form-urlencoded;charset=utf-8就可以了,不需要进行转码。

Javascript 相关文章推荐
javascript css float属性的特殊写法
Nov 13 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
Mar 09 Javascript
一个原生的用户等级的进度条
Jul 03 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
May 30 Javascript
javascript文本框内输入文字倒计数的方法
Feb 24 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
Sep 04 Javascript
通过示例彻底搞懂js闭包
Aug 10 Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
Dec 14 Javascript
关于redux-saga中take使用方法详解
Feb 27 Javascript
vue实现淘宝购物车功能
Apr 20 Javascript
一篇文章看懂JavaScript中的回调
Jan 05 Javascript
BootStrap中Table分页插件使用详解
Oct 09 #Javascript
微信小程序 for 循环详解
Oct 09 #Javascript
微信小程序 条件渲染详解
Oct 09 #Javascript
手机浏览器 后退按钮强制刷新页面方法总结
Oct 09 #Javascript
最实用的jQuery分页插件
Oct 09 #Javascript
js本地图片预览实现代码
Oct 09 #Javascript
js html css实现复选框全选与反选
Oct 09 #Javascript
You might like
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
为你总结一些php信息函数
2015/10/21 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
浅析vue深复制
2018/01/29 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
python基础教程之Hello World!
2014/08/29 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
keras K.function获取某层的输出操作
2020/06/29 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
酒吧总经理岗位职责
2013/12/10 职场文书
实习教师自我鉴定
2013/12/12 职场文书
《理想》教学反思
2014/02/17 职场文书
项目合作意向书范本
2014/04/01 职场文书
求职个人评价范文
2014/04/09 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
小学教学工作总结2015
2015/05/13 职场文书
python读取mnist数据集方法案例详解
2021/09/04 Python