AJAX传输乱码解决办法

来源:互联网 发布:大数据技术包括哪些 编辑:程序博客网 时间:2024/05/11 15:50
页面用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");这样得到的是正常的正文!

原创粉丝点击