ajax传输中文乱码解决方法
问题描述:
我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,ajax估计就是这样的好处吧,目前对ajax还不太熟悉。
ajax传输乱码时的代码:
- function saveForm(){
- if(document.theformadd.onsubmit()){
- disableAllBtn(true);
- j$.ajax({
- type:"get",
- url:"add_form_do.jsp",
- data:{
- problem_id : j$("#problem_id").val(),
- product_id : "<%=product_id%>",
- productId : j$("#productId").val(),
- depart_id : j$("#depart_id").val(),
- fk_busi_id : j$("#fk_busi_id").val(),
- fk_type : j$("#fk_type").val(),
- fk_source : j$("#fk_source").val(),
- fk_info : j$("#fk_info").val(),
- fk_name : j$("#fk_name").val(),
- fk_bank_name : j$("#fk_bank_name").val(),
- fk_bank_acct : j$("#fk_bank_acct").val(),
- sk_name : j$("#sk_name").val(),
- sk_bank_name : j$("#sk_bank_name").val(),
- sk_bank_acct : j$("#sk_bank_acct").val(),
- fk_money : j$("#fk_money").val(),
- fk_summary : j$("#fk_summary").val(),
- fk_date : j$("#fk_date").val(),
- input_man : "<%=input_operatorCode%>"
- },
- success:function(ret){
- if(ret == 1) {
- sl_alert("保存成功!");
- }else{
- sl_alert(ret);
- }
- window.returnValue=true;
- window.close();
- }
- });
- }
- }
然后我们在add_form_do.jsp中获取数据
- <%@ page contentType="text/html; charset=GBK" import="java.math.*,com.enfo.intrust.intrust.vo.*,java.io.*, com.enfo.intrust.web.*,java.util.*,com.enfo.intrust.dao.*,com.enfo.intrust.intrust.*,com.enfo.intrust.tools.*,com.enfo.intrust.project.*" %>
- <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-base.js"></script>
- <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-all.js"></script>
- <%@ include file="/includes/operator.inc" %>
- <%
- try{
- product_id = Utility.parseInt(Utility.trimNull(request.getParameter("product_id")),product_id);
- UnpostwarrantLocal local = EJBFactory.getUnpostwarrant();
- Integer problem_id = Utility.parseInt(request.getParameter("problem_id"),new Integer(0));
- Integer depart_id = Utility.parseInt(request.getParameter("depart_id"),new Integer(0)); //部门
- Integer productId = Utility.parseInt(Utility.trimNull(request.getParameter("productId")),product_id);
- String fk_busi_id = Utility.trimNull(request.getParameter("fk_busi_id")); //字典1206 费用
- String fk_type = Utility.trimNull(request.getParameter("fk_type")); //付款方式 2103
- String fk_source = Utility.trimNull(request.getParameter("fk_source")); //付款依据 2104
- String fk_info = Utility.trimNull(request.getParameter("fk_info")); //票据号码
- String fk_name = Utility.trimNull(request.getParameter("fk_name")); //付款单位
- String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name")); //付款银行名称
- String fk_bank_acct = Utility.trimNull(request.getParameter("fk_bank_acct")); //付款银行账号
- String sk_name = Utility.trimNull(request.getParameter("sk_name")); //收款单位
- String sk_bank_name = Utility.trimNull(request.getParameter("sk_bank_name")); //收款银行名称
- String sk_bank_acct = Utility.trimNull(request.getParameter("sk_bank_acct")); //收款银行账号
- BigDecimal fk_money = Utility.parseDecimal(Utility.trimNull(request.getParameter("fk_money")).replaceAll(",",""),new BigDecimal(0)); //金额
- String fk_summary = Utility.trimNull(request.getParameter("fk_summary")); //备注
- Integer fk_date = Utility.parseInt(request.getParameter("fk_date"),new Integer(Utility.getCurrentDate())); //要求付款日期
- local.setProblem_id(problem_id);
- //local.setProduct_id(product_id);
- local.setProduct_id(productId);
- local.setDepart_id(depart_id);
- local.setFk_busi_id(fk_busi_id);
- local.setFk_type(fk_type);
- local.setFk_source(fk_source);
- local.setFk_info(fk_info);
- local.setFk_name(fk_name);
- local.setFk_bank_name(fk_bank_name);
- local.setFk_bank_acct(fk_bank_acct);
- local.setSk_name(sk_name);
- local.setSk_bank_name(sk_bank_name);
- local.setSk_bank_acct(sk_bank_acct);
- local.setFk_money(fk_money);
- local.setFk_summary(fk_summary);
- local.setFk_date(fk_date);
- local.setInput_man(input_operatorCode);
- local.addFinacialcardInfoGuotou();
- out.clear();
- response.getWriter().write("1");
- }catch(Exception e){
- out.clear();
- response.getWriter().write(e.getMessage());
- }
- %>
这时候我接受到的数据会是中文乱码,不管传输方式是get,还是post都会中文乱码
解决方案:
我们可以在传输时对数据重新编码,然后在接受数据时重新解码。其实乱码的问题就是编码格式冲突,导致解码的密钥对之前格式解析错误,导致乱码。在传输时,在需要传输中文数据前面加一个encodeURI()编码,例如:encodeURI(j$("#fk_info").val());在接受需要中文数据的前面加一个java.net.URLDecoder.decode(value, "UTF-8"),例如
- String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name"));
- String trans = java.net.URLDecoder.decode(fk_bank_name, "UTF-8");
具体修改后的全部代码如下:
修复后ajax传输的代码:
- function saveForm(){
- if(document.theformadd.onsubmit()){
- disableAllBtn(true);
- j$.ajax({
- type:"get",
- url:"add_form_do.jsp",
- data:{
- problem_id : j$("#problem_id").val(),
- product_id : "<%=product_id%>",
- productId : j$("#productId").val(),
- depart_id : j$("#depart_id").val(),
- fk_busi_id : j$("#fk_busi_id").val(),
- fk_type : j$("#fk_type").val(),
- fk_source : j$("#fk_source").val(),
- fk_info : encodeURI(j$("#fk_info").val()),
- fk_name : encodeURI(j$("#fk_name").val()),
- fk_bank_name : encodeURI(j$("#fk_bank_name").val()),
- fk_bank_acct : encodeURI(j$("#fk_bank_acct").val()),
- sk_name : encodeURI(j$("#sk_name").val()),
- sk_bank_name : encodeURI(j$("#sk_bank_name").val()),
- sk_bank_acct : encodeURI(j$("#sk_bank_acct").val()),
- fk_money : j$("#fk_money").val(),
- fk_summary : encodeURI(j$("#fk_summary").val()),
- fk_date : j$("#fk_date").val(),
- input_man : "<%=input_operatorCode%>"
- },
- success:function(ret){
- if(ret == 1) {
- sl_alert("保存成功!");
- }else{
- sl_alert(ret);
- }
- window.returnValue=true;
- window.close();
- }
- });
- }
- }
修复后add_form_do.jsp中获取数据:
- <%@ page contentType="text/html; charset=GBK" import="java.math.*,com.enfo.intrust.intrust.vo.*,java.io.*, com.enfo.intrust.web.*,java.util.*,com.enfo.intrust.dao.*,com.enfo.intrust.intrust.*,com.enfo.intrust.tools.*,com.enfo.intrust.project.*" %>
- <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-base.js"></script>
- <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-all.js"></script>
- <%@ include file="/includes/operator.inc" %>
- <%
- try{
- product_id = Utility.parseInt(Utility.trimNull(request.getParameter("product_id")),product_id);
- UnpostwarrantLocal local = EJBFactory.getUnpostwarrant();
- Integer problem_id = Utility.parseInt(request.getParameter("problem_id"),new Integer(0));
- Integer depart_id = Utility.parseInt(request.getParameter("depart_id"),new Integer(0)); //部门
- Integer productId = Utility.parseInt(Utility.trimNull(request.getParameter("productId")),product_id);
- String fk_busi_id = Utility.trimNull(request.getParameter("fk_busi_id")); //字典1206 费用
- String fk_type = Utility.trimNull(request.getParameter("fk_type")); //付款方式 2103
- String fk_source = Utility.trimNull(request.getParameter("fk_source")); //付款依据 2104
- String fk_info = Utility.trimNull(request.getParameter("fk_info")); //票据号码
- String fk_name = Utility.trimNull(request.getParameter("fk_name")); //付款单位
- String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name")); //付款银行名称
- String fk_bank_acct = Utility.trimNull(request.getParameter("fk_bank_acct")); //付款银行账号
- String sk_name = Utility.trimNull(request.getParameter("sk_name")); //收款单位
- String sk_bank_name = Utility.trimNull(request.getParameter("sk_bank_name")); //收款银行名称
- String sk_bank_acct = Utility.trimNull(request.getParameter("sk_bank_acct")); //收款银行账号
- BigDecimal fk_money = Utility.parseDecimal(Utility.trimNull(request.getParameter("fk_money")).replaceAll(",",""),new BigDecimal(0)); //金额
- String fk_summary = Utility.trimNull(request.getParameter("fk_summary")); //备注
- Integer fk_date = Utility.parseInt(request.getParameter("fk_date"),new Integer(Utility.getCurrentDate())); //要求付款日期
- local.setProblem_id(problem_id);
- //local.setProduct_id(product_id);
- local.setProduct_id(productId);
- local.setDepart_id(depart_id);
- local.setFk_busi_id(fk_busi_id);
- local.setFk_type(fk_type);
- local.setFk_source(fk_source);
- local.setFk_info(java.net.URLDecoder.decode(fk_info, "UTF-8"));
- local.setFk_name(java.net.URLDecoder.decode(fk_name, "UTF-8"));
- local.setFk_bank_name(java.net.URLDecoder.decode(fk_bank_name, "UTF-8"));
- local.setFk_bank_acct(java.net.URLDecoder.decode(fk_bank_acct, "UTF-8"));
- local.setSk_name(java.net.URLDecoder.decode(sk_name, "UTF-8"));
- local.setSk_bank_name(java.net.URLDecoder.decode(sk_bank_name, "UTF-8"));
- local.setSk_bank_acct(java.net.URLDecoder.decode(sk_bank_acct, "UTF-8"));
- local.setFk_money(fk_money);
- local.setFk_summary(java.net.URLDecoder.decode(fk_summary, "UTF-8"));
- local.setFk_date(fk_date);
- local.setInput_man(input_operatorCode);
- local.addFinacialcardInfoGuotou();
- out.clear();
- response.getWriter().write("1");
- }catch(Exception e){
- out.clear();
- response.getWriter().write(e.getMessage());
- }
- %>
注意事项:
如果是接受数据不是jsp页面,而是Java类的时候,只需要URLDecoder.decode(value, "UTF-8");来解码,然后导入相应的包。还有传输时可能需要两次编码encodeURI(encodeURI(j$("#fk_info").val())),具体原因是我们通过request.getParameter()来获取数据时就会进行一次解码操作,解码时不变。
ajax传输中文乱码解决方法的更多相关文章
- jquery的ajax()函数传值中文乱码解决方法介绍
jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...
- ajax()函数传值中文乱码解决方法介绍
jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 复制代码 代码如下: $.ajax({ dataType : ‘json',type : ‘POST',url : ‘ht ...
- Java 前台后台数据传递、中文乱码解决方法
1.向前台传递数据;2.向后台传递数据;3.ajax post 提交数据到服务端时中文乱码解决方法;4.数组类型参数传递; 1.向前台传递数据:1.1 字符串数据传递: 这种方式只是单一的向前台传递 ...
- php mysql 中文乱码解决方法
本文章向码农们介绍php mysql 中文乱码解决方法,对码农们非常实用,需要的码农可以参考一下. 从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行 解 ...
- [转]mysql导入导出数据中文乱码解决方法小结
本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 ...
- Zxing中文乱码解决方法
Zxing中文乱码解决方法总结 尝试过非常多方法 最后发现此方法解决的乱码最多....... 在百度搜索二维码图片 经过前2页的測试 除开一张图之外 其余都能扫描出结果 假设大家有更好的解决方法 ...
- unity3d 中文乱码解决方法——cs代码文件格式批量转化UTF8
在Unity3d中经常会碰到中文乱码的问题,比如代码中的[AddComponentMenu("GameDef/AI/战机AI")],注释,中文文本等等 其原因在于,unity本身是 ...
- Codeblocks中文乱码解决方法
odeblocks中文乱码解决方法: 特别提示:出现中文乱码情况才执行以下操作,未出现请勿随意修改!!!! 打开Codeblocks -> 设置 -> 编辑器: 然后点击 Encoding ...
- 可遇不可求的Question之导入mysql中文乱码解决方法篇
可遇不可求的Question之导入mysql中文乱码解决方法篇 先 set names utf8;然后 source c:\1.sql ?
随机推荐
- Python中获取当前日期的格式
在Python里如何获取当前的日期和时间呢?在Python语言里,我们可以通过调用什么模块或者类函数来得到当前的时间或日期呢? 当然你可以使用时间模块(time module),该模块提供了各种和时间 ...
- 4-1 Linux用户管理命令详解
1. /etc/passwd 格式 用户名:密码:UID:GID:注释:家目录:默认shell useradd [options ] USERNAME -u: UID 要大于等于500, - ...
- Linux httpd源码编译安装
# wget http://apache.fayea.com/httpd/httpd-2.2.31.tar.bz2 去官网下载源码包 # mv httpd-.tar.bz2 /usr/local/sr ...
- 第10章 Shell编程(1)_正则表达式
1. 基础的正则表达式 1.1 正则表达式与通配符 (1)正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式. (2)通配符用来匹配符合条件的 ...
- idea 插件的使用 进阶篇
CSDN 2016博客之星评选结果公布 [系列直播]零基础学习微信小程序! "我的2016"主题征文活动 博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...
- The Euler function[HDU2824]
The Euler functionTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- [LeetCode] Additive Number 加法数
Additive number is a positive integer whose digits can form additive sequence. A valid additive sequ ...
- [LeetCode] Minimum Window Substring 最小窗口子串
Given a string S and a string T, find the minimum window in S which will contain all the characters ...
- ASP.NET MVC Form验证
一.前言 关于表单验证,园子里已经有不少的文章,相信Web开发人员也都基本写过,最近在一个个人项目中刚好用到,在这里与大家分享一下.本来想从用户注册开始写起,但发现东西比较多,涉及到界面.前端验证.前 ...
- 基于centos的lnmp搭建
部署lnmp环境 安装配置mariadb配置php配置phpmyadmin配置php-fpm配置nginx配置测试 LNMP(linux,nginx,mariadb,php)部署,以下默认在root权 ...