万象归一 2015-09-08 09:03 采纳率: 100%
浏览 1511
已采纳

ajax服务器端到客户端乱码问题

服务器端使用的是Servlet,传递的中文都是乱码,

 public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        int parent=Integer.parseInt(request.getParameter("parent"));
        response.setContentType("text/xml");
        request.setCharacterEncoding("GBK");
        response.setCharacterEncoding("GBK");
        MenuBiz menuBiz=new MenuBiz();
        ArrayList<Menu> menuList=menuBiz.loadMenu(parent);
        StringBuffer menuName=new StringBuffer();
        for (Menu menu : menuList) {            
            menuName.append(URLEncoder.encode(menu.getMenuName(),"GBK")+"-");
        }

        PrintWriter out=response.getWriter();

        out.println(menuName);
        out.flush();
        out.close();

        //session.setAttribute("menuList", menuList);

    }

客户端用的是js

 <script type="text/javascript">
        var xmlHttp;
        var mid;
        function menu(menuId){
            mid=menuId.id;
            var url="MenuServlet?parent="+mid;          
            xmlHttp=createXmlHttpRequest();         
            xmlHttp.onreadystatechange=processRequest;          
            xmlHttp.open("GET",url,true);
            xmlHttp.send(null);
        }

        function processRequest(){
            if(xmlHttp.readyState==4){
                if(xmlHttp.status==200){                
                    var sobj=document.getElementById(mid);
                    var ht=sobj.innerHTML;
                    sobj.innerHTML=ht;
                    var ceshi= xmlHttp.responseText.split("-");

                    var suggest="";
                    if(ceshi.length>0&&ceshi[0].length>0){
                        for(var i=0;i<ceshi.length;i++){                         
                            suggest+="<div>"+ceshi[i]+"</div>";
                        }
                        sobj.innerHTML+=suggest;
                    }
                }else{
                    alert("请求处理返回的数据有误");
                    alert(xmlhttp.status);
                }
            }
        }

        function createXmlHttpRequest(){
            if(window.ActiveXObject){
                return new ActiveXObject("Microsoft.XMLHTTP");
            }else if(window.XMLHttpRequset){
                return new XMLHttpRequset();
            }
        }
    </script>
  • 写回答

1条回答 默认 最新

  • Go 旅城通票 2015-09-08 09:08
    关注

    mid包含中文要调用2次encodeURIComponent编码,然后服务器端解码,看这个:http://xiewenbo.iteye.com/blog/1295749

     var url="MenuServlet?parent="+encodeURIComponent(encodeURIComponent(mid));     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 一道python难题2
  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备