• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Ajax传输中文乱码问题的解决办法

    AJAX简介

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

    AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

    AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

    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传输中文乱码问题的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • ajax请求乱码的解决方法(中文乱码)
    • jquery.ajax的url中传递中文乱码问题的解决方法
    • jsp中 ajax的get请求的中文乱码问题的解决方法
    • 解决ajax+php中文乱码的方法详解
    • JQuery AJAX 中文乱码问题解决
    • ajax中文乱码问题解决方案
    • jquery的ajax()函数传值中文乱码解决方法介绍
    • JQuery中使用ajax传输超大数据的解决方法
    • AJAX在GB2312的中文编码传输 AJAX特殊字符编码正确方法
    上一篇:基于Ajax+div的“左边菜单、右边内容”页面效果实现
    下一篇:非常实用的ajax用户注册模块
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Ajax传输中文乱码问题的解决办法 Ajax,传输,中文,乱码,问,