• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
洞庭熊猫
无兄弟不篮球,无团队不项目!
博客园    首页    新随笔    联系   管理    订阅  订阅
JQuery .Ajax 详解 中文问题

jQuery ajax乱码问题解决

一、测试环境
jQuery:1.3.2
tomcat:5.5.17

二、测试方法

1.使用get方式

服务器端代码:
String name = new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8");

客户端js代码:
  <1>$.ajax({url: "2.jsp",type: "get",data: {name:"中文"},success: function(response){
        alert(response);
        }});
           结果:正确显示

<2>$.ajax({url: "2.jsp",type: "get",data: "name=中文",success: function(response){
        alert(response);
      }});
           结果:乱码

<3>$.get("2.jsp", { name: "中文" },function(response){
    alert(response);
      });
           结果:正确显示

<4>$.get("2.jsp", "name=中文",function(response){
    alert(response);
    });
     结果:乱码


2.post方式

服务器端代码:
request.setCharacterEncoding("UTF-8");  
String name = request.getParameter("name");

客户端js代码:
<1>$.ajax({url: "3.jsp",type: "post",data: "method=testAjaxPost&name=中文",success: function(response){
    alert(response);
     }});
     结果:正确显示

<2>$.ajax({url: "3.jsp",type: "post",data: {name:"中文"},success: function(response){
    alert(response);
     }});
     结果:正确显示

<3>$.post("3.jsp", { name: "中文" },function(response){
    alert(response);
     });
      结果:正确显示

<4>$.post("3.jsp", "name=中文",function(response){
    alert(response);
     });
     结果:正确显示

三、使用filter

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    if (req.getHeader("X-Requested-With") != null && req.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")) {
        request.setCharacterEncoding("utf-8");
    } else {
        request.setCharacterEncoding("gbk");
    }
    chain.doFilter(request, response);
}

      jQuery在使用ajax的时候会在header中加入X-Requested-With,值为:XMLHttpRequest,filter中判断是jQuery的ajax请求时就把字符编码设为utf8,这样可以解决post提交中的中文乱码问题,不需要在代码中设置request.setCharacterEncoding("UTF-8");

对于get方式的中文乱码问题,建议不使用get方式提交中文,统统改为post ^-^

 

      为了和prototype.js处理中文的方式一致,可以使用如下的方式,自定义header中的属性RequestType
$.ajax({
    url: "3.jsp",
    type: "post",
    data: {name:"中文"},
    beforeSend: function(XMLHttpRequest){
        XMLHttpRequest.setRequestHeader("RequestType", "ajax");
        alert("开始");
    },
    success: function(data, textStatus){
        alert(data);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown){
        alert("错误:" + textStatus);
    },
    complete: function(XMLHttpRequest, textStatus){
        alert("完成:" + textStatus);
    }
 });
filter代码如下:
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    if (req.getHeader("RequestType") != null && req.getHeader("RequestType").equalsIgnoreCase("ajax"))) {
        request.setCharacterEncoding("utf-8");
    } else {
        request.setCharacterEncoding("gbk");
    }
    chain.doFilter(request, response);
}

 

posted on 2010-06-11 01:16  木神易  阅读(1988)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3