万象归一 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 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?