侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

前端  /  管理员 发布于 5年前   258

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="//article/<%=request.getContextPath()%>/ext2.0/ext-base.js"></script><script type="text/javascript" src="//article/<%=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")); //付款方式 2103String fk_source = Utility.trimNull(request.getParameter("fk_source")); //付款依据 2104String 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="//article/<%=request.getContextPath()%>/ext2.0/ext-base.js"></script><script type="text/javascript" src="//article/<%=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")); //付款方式 2103String fk_source = Utility.trimNull(request.getParameter("fk_source")); //付款依据 2104String 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用户注册模块
    下一条:
    Ajax点击不断加载数据列表
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客