问题描述:

  我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,ajax估计就是这样的好处吧,目前对ajax还不太熟悉。

ajax传输乱码时的代码:

  1. function saveForm(){
  2. if(document.theformadd.onsubmit()){
  3. disableAllBtn(true);
  4. j$.ajax({
  5. type:"get",
  6. url:"add_form_do.jsp",
  7. data:{
  8. problem_id : j$("#problem_id").val(),
  9. product_id : "<%=product_id%>",
  10. productId : j$("#productId").val(),
  11. depart_id : j$("#depart_id").val(),
  12. fk_busi_id : j$("#fk_busi_id").val(),
  13. fk_type : j$("#fk_type").val(),
  14. fk_source : j$("#fk_source").val(),
  15. fk_info : j$("#fk_info").val(),
  16. fk_name : j$("#fk_name").val(),
  17. fk_bank_name : j$("#fk_bank_name").val(),
  18. fk_bank_acct : j$("#fk_bank_acct").val(),
  19. sk_name : j$("#sk_name").val(),
  20. sk_bank_name : j$("#sk_bank_name").val(),
  21. sk_bank_acct : j$("#sk_bank_acct").val(),
  22. fk_money : j$("#fk_money").val(),
  23. fk_summary : j$("#fk_summary").val(),
  24. fk_date : j$("#fk_date").val(),
  25. input_man : "<%=input_operatorCode%>"
  26. },
  27. success:function(ret){
  28. if(ret == 1) {
  29. sl_alert("保存成功!");
  30. }else{
  31. sl_alert(ret);
  32.  
  33. }
  34.  
  35. window.returnValue=true;
  36. window.close();
  37.  
  38. }
  39. });
  40. }
  41. }

然后我们在add_form_do.jsp中获取数据

  1. <%@ 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.*" %>
  2. <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-base.js"></script>
  3. <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-all.js"></script>
  4. <%@ include file="/includes/operator.inc" %>
  5. <%
  6. try{
  7. product_id = Utility.parseInt(Utility.trimNull(request.getParameter("product_id")),product_id);
  8.  
  9. UnpostwarrantLocal local = EJBFactory.getUnpostwarrant();
  10.  
  11. Integer problem_id = Utility.parseInt(request.getParameter("problem_id"),new Integer(0));
  12.  
  13. Integer depart_id = Utility.parseInt(request.getParameter("depart_id"),new Integer(0)); //部门
  14. Integer productId = Utility.parseInt(Utility.trimNull(request.getParameter("productId")),product_id);
  15. String fk_busi_id = Utility.trimNull(request.getParameter("fk_busi_id")); //字典1206 费用
  16. String fk_type = Utility.trimNull(request.getParameter("fk_type")); //付款方式 2103
  17. String fk_source = Utility.trimNull(request.getParameter("fk_source")); //付款依据 2104
  18. String fk_info = Utility.trimNull(request.getParameter("fk_info")); //票据号码
  19. String fk_name = Utility.trimNull(request.getParameter("fk_name")); //付款单位
  20. String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name")); //付款银行名称
  21. String fk_bank_acct = Utility.trimNull(request.getParameter("fk_bank_acct")); //付款银行账号
  22. String sk_name = Utility.trimNull(request.getParameter("sk_name")); //收款单位
  23. String sk_bank_name = Utility.trimNull(request.getParameter("sk_bank_name")); //收款银行名称
  24. String sk_bank_acct = Utility.trimNull(request.getParameter("sk_bank_acct")); //收款银行账号
  25. BigDecimal fk_money = Utility.parseDecimal(Utility.trimNull(request.getParameter("fk_money")).replaceAll(",",""),new BigDecimal(0)); //金额
  26. String fk_summary = Utility.trimNull(request.getParameter("fk_summary")); //备注
  27. Integer fk_date = Utility.parseInt(request.getParameter("fk_date"),new Integer(Utility.getCurrentDate())); //要求付款日期
  28.  
  29. local.setProblem_id(problem_id);
  30. //local.setProduct_id(product_id);
  31. local.setProduct_id(productId);
  32. local.setDepart_id(depart_id);
  33. local.setFk_busi_id(fk_busi_id);
  34. local.setFk_type(fk_type);
  35. local.setFk_source(fk_source);
  36. local.setFk_info(fk_info);
  37. local.setFk_name(fk_name);
  38. local.setFk_bank_name(fk_bank_name);
  39. local.setFk_bank_acct(fk_bank_acct);
  40. local.setSk_name(sk_name);
  41. local.setSk_bank_name(sk_bank_name);
  42. local.setSk_bank_acct(sk_bank_acct);
  43. local.setFk_money(fk_money);
  44. local.setFk_summary(fk_summary);
  45. local.setFk_date(fk_date);
  46. local.setInput_man(input_operatorCode);
  47. local.addFinacialcardInfoGuotou();
  48. out.clear();
  49. response.getWriter().write("1");
  50. }catch(Exception e){
  51. out.clear();
  52. response.getWriter().write(e.getMessage());
  53. }
  54.  
  55. %>

这时候我接受到的数据会是中文乱码,不管传输方式是get,还是post都会中文乱码

解决方案:

  我们可以在传输时对数据重新编码,然后在接受数据时重新解码。其实乱码的问题就是编码格式冲突,导致解码的密钥对之前格式解析错误,导致乱码。在传输时,在需要传输中文数据前面加一个encodeURI()编码,例如:encodeURI(j$("#fk_info").val());在接受需要中文数据的前面加一个java.net.URLDecoder.decode(value, "UTF-8"),例如

  1. String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name"));
  1. String trans = java.net.URLDecoder.decode(fk_bank_name, "UTF-8");

具体修改后的全部代码如下:

修复后ajax传输的代码:

  1. function saveForm(){
  2. if(document.theformadd.onsubmit()){
  3. disableAllBtn(true);
  4. j$.ajax({
  5. type:"get",
  6. url:"add_form_do.jsp",
  7. data:{
  8. problem_id : j$("#problem_id").val(),
  9. product_id : "<%=product_id%>",
  10. productId : j$("#productId").val(),
  11. depart_id : j$("#depart_id").val(),
  12. fk_busi_id : j$("#fk_busi_id").val(),
  13. fk_type : j$("#fk_type").val(),
  14. fk_source : j$("#fk_source").val(),
  15. fk_info : encodeURI(j$("#fk_info").val()),
  16. fk_name : encodeURI(j$("#fk_name").val()),
  17. fk_bank_name : encodeURI(j$("#fk_bank_name").val()),
  18. fk_bank_acct : encodeURI(j$("#fk_bank_acct").val()),
  19. sk_name : encodeURI(j$("#sk_name").val()),
  20. sk_bank_name : encodeURI(j$("#sk_bank_name").val()),
  21. sk_bank_acct : encodeURI(j$("#sk_bank_acct").val()),
  22. fk_money : j$("#fk_money").val(),
  23. fk_summary : encodeURI(j$("#fk_summary").val()),
  24. fk_date : j$("#fk_date").val(),
  25. input_man : "<%=input_operatorCode%>"
  26. },
  27. success:function(ret){
  28. if(ret == 1) {
  29. sl_alert("保存成功!");
  30. }else{
  31. sl_alert(ret);
  32.  
  33. }
  34.  
  35. window.returnValue=true;
  36. window.close();
  37.  
  38. }
  39. });
  40. }
  41. }

修复后add_form_do.jsp中获取数据:

  1. <%@ 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.*" %>
  2. <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-base.js"></script>
  3. <script type="text/javascript" src="<%=request.getContextPath()%>/ext2.0/ext-all.js"></script>
  4. <%@ include file="/includes/operator.inc" %>
  5. <%
  6. try{
  7. product_id = Utility.parseInt(Utility.trimNull(request.getParameter("product_id")),product_id);
  8.  
  9. UnpostwarrantLocal local = EJBFactory.getUnpostwarrant();
  10.  
  11. Integer problem_id = Utility.parseInt(request.getParameter("problem_id"),new Integer(0));
  12.  
  13. Integer depart_id = Utility.parseInt(request.getParameter("depart_id"),new Integer(0)); //部门
  14. Integer productId = Utility.parseInt(Utility.trimNull(request.getParameter("productId")),product_id);
  15. String fk_busi_id = Utility.trimNull(request.getParameter("fk_busi_id")); //字典1206 费用
  16. String fk_type = Utility.trimNull(request.getParameter("fk_type")); //付款方式 2103
  17. String fk_source = Utility.trimNull(request.getParameter("fk_source")); //付款依据 2104
  18. String fk_info = Utility.trimNull(request.getParameter("fk_info")); //票据号码
  19. String fk_name = Utility.trimNull(request.getParameter("fk_name")); //付款单位
  20. String fk_bank_name = Utility.trimNull(request.getParameter("fk_bank_name")); //付款银行名称
  21. String fk_bank_acct = Utility.trimNull(request.getParameter("fk_bank_acct")); //付款银行账号
  22. String sk_name = Utility.trimNull(request.getParameter("sk_name")); //收款单位
  23. String sk_bank_name = Utility.trimNull(request.getParameter("sk_bank_name")); //收款银行名称
  24. String sk_bank_acct = Utility.trimNull(request.getParameter("sk_bank_acct")); //收款银行账号
  25. BigDecimal fk_money = Utility.parseDecimal(Utility.trimNull(request.getParameter("fk_money")).replaceAll(",",""),new BigDecimal(0)); //金额
  26. String fk_summary = Utility.trimNull(request.getParameter("fk_summary")); //备注
  27. Integer fk_date = Utility.parseInt(request.getParameter("fk_date"),new Integer(Utility.getCurrentDate())); //要求付款日期
  28.  
  29. local.setProblem_id(problem_id);
  30. //local.setProduct_id(product_id);
  31. local.setProduct_id(productId);
  32. local.setDepart_id(depart_id);
  33. local.setFk_busi_id(fk_busi_id);
  34. local.setFk_type(fk_type);
  35. local.setFk_source(fk_source);
  36. local.setFk_info(java.net.URLDecoder.decode(fk_info, "UTF-8"));
  37. local.setFk_name(java.net.URLDecoder.decode(fk_name, "UTF-8"));
  38. local.setFk_bank_name(java.net.URLDecoder.decode(fk_bank_name, "UTF-8"));
  39. local.setFk_bank_acct(java.net.URLDecoder.decode(fk_bank_acct, "UTF-8"));
  40. local.setSk_name(java.net.URLDecoder.decode(sk_name, "UTF-8"));
  41. local.setSk_bank_name(java.net.URLDecoder.decode(sk_bank_name, "UTF-8"));
  42. local.setSk_bank_acct(java.net.URLDecoder.decode(sk_bank_acct, "UTF-8"));
  43. local.setFk_money(fk_money);
  44. local.setFk_summary(java.net.URLDecoder.decode(fk_summary, "UTF-8"));
  45. local.setFk_date(fk_date);
  46. local.setInput_man(input_operatorCode);
  47. local.addFinacialcardInfoGuotou();
  48. out.clear();
  49. response.getWriter().write("1");
  50. }catch(Exception e){
  51. out.clear();
  52. response.getWriter().write(e.getMessage());
  53. }
  54.  
  55. %>

注意事项:

  如果是接受数据不是jsp页面,而是Java类的时候,只需要URLDecoder.decode(value, "UTF-8");来解码,然后导入相应的包。还有传输时可能需要两次编码encodeURI(encodeURI(j$("#fk_info").val())),具体原因是我们通过request.getParameter()来获取数据时就会进行一次解码操作,解码时不变。

ajax传输中文乱码解决方法的更多相关文章

  1. jquery的ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...

  2. ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 复制代码 代码如下: $.ajax({ dataType : ‘json',type : ‘POST',url : ‘ht ...

  3. Java 前台后台数据传递、中文乱码解决方法

    1.向前台传递数据;2.向后台传递数据;3.ajax post 提交数据到服务端时中文乱码解决方法;4.数组类型参数传递; 1.向前台传递数据:1.1 字符串数据传递:  这种方式只是单一的向前台传递 ...

  4. php mysql 中文乱码解决方法

    本文章向码农们介绍php mysql 中文乱码解决方法,对码农们非常实用,需要的码农可以参考一下. 从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行 解 ...

  5. [转]mysql导入导出数据中文乱码解决方法小结

    本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 ...

  6. Zxing中文乱码解决方法

    Zxing中文乱码解决方法总结 尝试过非常多方法  最后发现此方法解决的乱码最多....... 在百度搜索二维码图片 经过前2页的測试  除开一张图之外  其余都能扫描出结果 假设大家有更好的解决方法 ...

  7. unity3d 中文乱码解决方法——cs代码文件格式批量转化UTF8

    在Unity3d中经常会碰到中文乱码的问题,比如代码中的[AddComponentMenu("GameDef/AI/战机AI")],注释,中文文本等等 其原因在于,unity本身是 ...

  8. Codeblocks中文乱码解决方法

    odeblocks中文乱码解决方法: 特别提示:出现中文乱码情况才执行以下操作,未出现请勿随意修改!!!! 打开Codeblocks -> 设置 -> 编辑器: 然后点击 Encoding ...

  9. 可遇不可求的Question之导入mysql中文乱码解决方法篇

    可遇不可求的Question之导入mysql中文乱码解决方法篇 先 set names utf8;然后 source c:\1.sql ?

随机推荐

  1. Python中获取当前日期的格式

    在Python里如何获取当前的日期和时间呢?在Python语言里,我们可以通过调用什么模块或者类函数来得到当前的时间或日期呢? 当然你可以使用时间模块(time module),该模块提供了各种和时间 ...

  2. 4-1 Linux用户管理命令详解

    1. /etc/passwd 格式 用户名:密码:UID:GID:注释:家目录:默认shell useradd  [options ]    USERNAME -u: UID  要大于等于500, - ...

  3. Linux httpd源码编译安装

    # wget http://apache.fayea.com/httpd/httpd-2.2.31.tar.bz2 去官网下载源码包 # mv httpd-.tar.bz2 /usr/local/sr ...

  4. 第10章 Shell编程(1)_正则表达式

    1. 基础的正则表达式 1.1 正则表达式与通配符 (1)正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式. (2)通配符用来匹配符合条件的 ...

  5. idea 插件的使用 进阶篇

    CSDN 2016博客之星评选结果公布    [系列直播]零基础学习微信小程序!      "我的2016"主题征文活动   博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...

  6. The Euler function[HDU2824]

    The Euler functionTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...

  7. [LeetCode] Additive Number 加法数

    Additive number is a positive integer whose digits can form additive sequence. A valid additive sequ ...

  8. [LeetCode] Minimum Window Substring 最小窗口子串

    Given a string S and a string T, find the minimum window in S which will contain all the characters ...

  9. ASP.NET MVC Form验证

    一.前言 关于表单验证,园子里已经有不少的文章,相信Web开发人员也都基本写过,最近在一个个人项目中刚好用到,在这里与大家分享一下.本来想从用户注册开始写起,但发现东西比较多,涉及到界面.前端验证.前 ...

  10. 基于centos的lnmp搭建

    部署lnmp环境 安装配置mariadb配置php配置phpmyadmin配置php-fpm配置nginx配置测试 LNMP(linux,nginx,mariadb,php)部署,以下默认在root权 ...