ajax乱码解决记录

做j2ee web项目,很多时候都直接在jsp页面设置编码为:GBK。而在表单中提交数据到后台服务时遇到中文乱码,我们也会轻车熟路的在web.xml中增加编码过滤器:

 <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>GBK</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

注:此过滤器只对post方式提交的数据有效,get方式需要采用另外的方法解决。

但用到ajax提交数据时,发现该过滤器失效,中文数据到后台,还是乱码。网上关于ajax提交数据成乱码的解决方法很多,在实际的项目开发中并不好用。在此仅提供另一种解法方法,作为一种参考。

 

分析:ajax提交数据时,是将数据进行UTF-8编码后发送的,请求数据到达过滤器进行解码时,UTF-8和GBK并不是兼容型编码。所以经过过滤器后还是乱码。如果将过滤器的编码设置为:UTF-8则可以正确解码中文数据。但这样一来,jsp页面提交的数据又会出现乱码。所以可以考虑配置两个过滤器,配置一个针对ajax请求的过滤器。

 

 <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/ajax/*</url-pattern>
 </filter-mapping>

 

在映射请求路径时,需要与前一个过滤器有所区别,如针对ajax请求的url-pattern:/ajax/*   在用到ajax请求的地方,需要注意将ajax请求的url带上ajax标识。这样ajax请求会先经过utf-8过滤器的处理,此时已经无乱码,再经过第一个过滤器的处理。最后到后台程序时,数据已经无乱码问题了。

 

此方法需要约定ajax请求的url遵循一定的规则。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值