jsp_ajax_post 方式传参数乱码问题学习笔记

问题:我全站都是使用utf-8编码,不过在用ajax向servlet传参数的时候,firfox显示正常,IE8出现乱码。

部分源码如下:ajax(js)代码

<script language="javascript">
<!--
      var xmlhttp;

      function sub(id){
        if(window.XMLHttpRequest){
          xmlhttp =new XMLHttpRequest();
          if(xmlhttp.overrideMineType){
             xmlhttp.overrideMineType("text/xml");
          }else if(window.ActiveXobject){
             var MSXML=['Msxml2.XMLHTTP','Microsoft.XMLHTTP'];//['Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP']
             for(var i=0; i<MSXML.length; i++){
               try{
                xmlhttp= new window.ActiveXObject(MSXML);
                break;
             }catch(e){}
            }
          }
          
        }
       if(xmlhttp==undefined||xmlhttp==null){
              alert("无法创建XMLHttpRequest");
       }
    
      var vl=document.getElementById(id).value;
 
     // xmlhttp.open("GET","User_manager?bvalue="+vl,true);
       //      alert("41");
      xmlhttp.open("POST",encodeURI("User_manager"),true);//对传的参数进行URL编码,可防止一些乱码问题。
      xmlhttp.onreadystatechange=callback;
      xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");/charset=UTF-8.一定要加。不加就会就会出现上文的乱码问题。
   
      xmlhttp.send(encodeURI("bvalue="+vl+"&id="+id));
      //xmlhttp.send(null);
       function callback(){
         if(xmlhttp.readyState==4){
            if(xmlhttp.status==200){
               var message= xmlhttp.responseText;
               ///var doxml=xmlhttp.responseXML;
               var button= document.getElementById(id);
                alert("41");
                alert(message);
               button.value=message;
              
            }
         }
      }
    }
     2 jsp 部分页面:

 <input type="button" id="<s:property value='id' />" name="state" value="<s:property value='stateString'/>" οnclick="sub(this.id)"></td> //这是要动态改变的按钮。

 

3,后台servlet。

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
   response.setCharacterEncoding("UTF-8");
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  String value=request.getParameter("bvalue");
  String id=request.getParameter("id");

总结,现在很多人纠结于中文乱码问题,其实只要全站用了utf-8编码,不建议用GBK(转码很头疼),还有Javascript也要注意编码统一(utf-8)。基本不会出现乱码问题。传参数的时候建议使用POST方式。这也容易引起乱码.而且他参数长度也有限制。要传大量参数的时候,一定要用POST方式。

问题:我全站都是使用utf-8编码,不过在用ajax向servlet传参数的时候,firfox显示正常,IE8出现乱码。

部分源码如下:ajax(js)代码

<script language="javascript">
<!--
      var xmlhttp;

      function sub(id){
        if(window.XMLHttpRequest){
          xmlhttp =new XMLHttpRequest();
          if(xmlhttp.overrideMineType){
             xmlhttp.overrideMineType("text/xml");
          }else if(window.ActiveXobject){
             var MSXML=['Msxml2.XMLHTTP','Microsoft.XMLHTTP'];//['Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP']
             for(var i=0; i<MSXML.length; i++){
               try{
                xmlhttp= new window.ActiveXObject(MSXML);
                break;
             }catch(e){}
            }
          }
          
        }
       if(xmlhttp==undefined||xmlhttp==null){
              alert("无法创建XMLHttpRequest");
       }
    
      var vl=document.getElementById(id).value;
 
     // xmlhttp.open("GET","User_manager?bvalue="+vl,true);
       //      alert("41");
      xmlhttp.open("POST",encodeURI("User_manager"),true);//对传的参数进行URL编码,可防止一些乱码问题。
      xmlhttp.onreadystatechange=callback;
      xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");/charset=UTF-8.一定要加。不加就会就会出现上文的乱码问题。
   
      xmlhttp.send(encodeURI("bvalue="+vl+"&id="+id));
      //xmlhttp.send(null);
       function callback(){
         if(xmlhttp.readyState==4){
            if(xmlhttp.status==200){
               var message= xmlhttp.responseText;
               ///var doxml=xmlhttp.responseXML;
               var button= document.getElementById(id);
                alert("41");
                alert(message);
               button.value=message;
              
            }
         }
      }
    }
     2 jsp 部分页面:

 <input type="button" id="<s:property value='id' />" name="state" value="<s:property value='stateString'/>" οnclick="sub(this.id)"></td> //这是要动态改变的按钮。

 

3,后台servlet。

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
   response.setCharacterEncoding("UTF-8");
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  String value=request.getParameter("bvalue");
  String id=request.getParameter("id");

总结,现在很多人纠结于中文乱码问题,其实只要全站用了utf-8编码,不建议用GBK(转码很头疼),还有Javascript也要注意编码统一(utf-8)。对传的参数用encodeURI() 进行URL编码,基本不会出现乱码问题。传参数的时候建议使用POST方式。这也容易引起乱码.而且他参数长度也有限制。要传大量参数的时候,一定要用POST方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值