AJAX传输乱码解决办法

页面用AJAX传递数据时
  1. function login(uname,pwd) {
  2.             var XMLHttpRequestObject = false;
  3.             if(window.XMLHttpRequest) {
  4.                 XMLHttpRequestObject = new XMLHttpRequest();
  5.             } else {
  6.                 if(window.ActiveXObject) {
  7.                     XMLHttpRequestObject = new ActiveObject("Microsoft.XMLHTTP");
  8.                 }
  9.             }
  10.             var uri = "uname=" + uname.value + "&pwd=" + pwd.value;
  11.             var url = "login.do?method=login";
  12.             uri = encodeURI(encodeURI(uri));
  13.             if(XMLHttpRequestObject) {
  14.                 XMLHttpRequestObject.open("POST",url,true);
  15.                 XMLHttpRequestObject.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  16.                 XMLHttpRequestObject.onreadystatechange = function () {
  17.                     if(XMLHttpRequestObject.readyState == 4) {
  18.                         if(XMLHttpRequestObject.status == 200) {
  19.                             var text = XMLHttpRequestObject.responseText;
  20.                             if(text == "error") {
  21.                                 alert("输入的用户名或密码错误,请重新输入");
  22.                                 uname.value="";
  23.                                 pwd.value="";
  24.                             }else {
  25.                                 alert("欢迎回来");
  26.                             }
  27.                         }
  28.                     }
  29.                 };
  30.                 XMLHttpRequestObject.send(uri);
  31.             }
  32.         }

JAVA Action里处理代码

  1. public ActionForward login(ActionMapping mapping, ActionForm form,
  2.             HttpServletRequest req, HttpServletResponse res) throws Exception {
  3.         String uname = URLDecoder.decode(req.getParameter("uname"),"UTF-8");
  4.         String pwd = URLDecoder.decode(req.getParameter("pwd"),"UTF-8");
  5.         pwd = md5.getMD5ofStr(pwd);
  6.         UserVo userVo = new UserVo(uname, pwd);
  7.         UserVo findVo = (UserVo)loginServiceImpl.findUserInfo(userVo);
  8.         String message = null;
  9.         if(findVo != null) {
  10.             message = "sucess";
  11.         }else {
  12.             message = "error";
  13.         }   
  14.         res.setContentType("text/xml;charset=UTF-8");
  15.         res.setHeader("Cache-Control""no-cache");
  16.         PrintWriter pw = res.getWriter();
  17.         pw.write(message);
  18.         log.info("message==" + message);
  19.         pw.close();
  20.         return null;
  21.     }

uri = encodeURI(encodeURI(uri));这里两次编码是为了解决中文乱码的问题,因为script的编码和java的解码不对应,会导致乱码,所有这里要两次编码
最后在Action里接收数据时一次解码,URLDecoder.decode(req.getParameter("uname"),"UTF-8");这样得到的是正常的正文!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值