欢迎光临郝学武的blog。

AJAX中文乱码

Posted on 2008-06-20 16:43 陕西BOY 阅读(4344) 评论(0)  编辑  收藏

今天上午做项目时候因为要用到ajax异步提交数据,这里我用的是prototype.js里包的ajax对象,大家也可以自己实现XMLHttpRequest对象,vm页面用的是gbk编码(如果是utf-8就不会有问题了),这个url带有两个参数,一个是id,一个是汉字内容,浪费了不少时间!以下是说明:
例如如下js:
function editPollDetail(pollDetailId,pollId)
{
     var xuanxiangneirong=document.getElementById('xuanxiangneirong'+pollDetailId);
     var url = 'createThread.do';
  var pars = 'method=editOnePollDetail&pollDetailId='+pollDetailId+'&content='+xuanxiangneirong.value+'&pollId='+pollId;
  var ajax = new Ajax.Request(url,{method:'post',parameters:pars,onComplete:showEditResult}); 
}
其中xuanxiangneirong是中文,开始我用了很多方法,在action中utf-8,gbk ,iso8859-1相互转换,用了3的排列的可能全试了, 就是不行。于是上网又转了很长时间看了很多,还是不行,最后我自己解决了这个问题,代码如下:
function editPollDetail(pollDetailId,pollId)
{
     var xuanxiangneirong=document.getElementById('xuanxiangneirong'+pollDetailId);
     var url = 'createThread.do';
  var pars = 'method=editOnePollDetail&pollDetailId='+pollDetailId+'&content='+encodeURI(encodeURI(xuanxiangneirong.value))+'&pollId='+pollId; //注意这里用了两次js的encodeURI进行转码。
  var ajax = new Ajax.Request(url,{method:'post',parameters:pars,onComplete:showEditResult});
}
在action中做如下的处理:
public ActionForward editOnePollDetail(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
 {
      response.setContentType("text/plain; charset=GBK");
     String id=request.getParameter("pollDetailId");
     String pollid=request.getParameter("pollId");
     String content=request.getParameter("content");
     try
     {
           content=URLDecoder.decode(content,"utf8");  //因为ajax默认是utf-8编码,这里将刚才的转码进行解析,这样得到就是你要传的汉字了。
           System.out.println(content);
     }catch(Exception e)
     {
      System.out.println("解码出现异常");
      e.printStackTrace();
     }
  }
大家可以做个demo,不过建议大家以后页面都用utf-8的,这样就能避免这些问题。


只有注册用户登录后才能发表评论。


网站导航:
 

posts - 17, comments - 65, trackbacks - 0, articles - 28

Copyright © 陕西BOY