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 函数使用说明
Apr 07 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
Jan 23 Javascript
JQuery中$.each 和$(selector).each()的区别详解
Mar 13 Javascript
javascript闭包的理解
Apr 01 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
easyui Droppable组件实现放置特效
Aug 19 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
Dec 28 Javascript
微信禁止下拉查看URL的处理方法
Sep 28 Javascript
浅谈ES6 模板字符串的具体使用方法
Nov 07 Javascript
vue实现select下拉显示隐藏功能
Sep 30 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
Apr 07 Javascript
ES6字符串的扩展实例
Dec 21 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
php字符串截取函数用法分析
2014/11/25 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
Python简单获取自身外网IP的方法
2016/09/18 Python
python验证码识别的示例代码
2017/09/21 Python
python中Apriori算法实现讲解
2017/12/10 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
python 常见的排序算法实现汇总
2020/08/21 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
《社戏》教学反思
2014/04/15 职场文书
调解协议书
2014/04/16 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
银行自荐信怎么写
2015/03/05 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
初中政治教学反思
2016/02/23 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
MySQL开启事务的方式
2021/06/26 MySQL