万象归一 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中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员