从页面发送数据到后台传递的值是中文结果乱码,页面的编码是utf8了,而且编码过滤器也弄出utf8了,
html代码:
<select id="select1" name="cgy" onchange="chang(this.options[this.selectedIndex].text)">
<option>请选择分类</option>
<option>鞋</option>
<option>手机</option>
<option>电脑</option><option>服装</option>
<option>书籍</option>
</select>javascript代码:
<script type="text/javascript">
function chang(str){
 var msg=str;
 var url="<%=request.getContextPath()%>/loadmessage.action?msg="+msg;
 send_request(url,msg);
  } 
  
  var http_request = false;
function send_request(url,msg)
{ //初始化、指定处理函数、发送请求的函数
   //alert("url\t"+url);
http_request = false;
//开始初始化XMLHttpRequest对象
if(window.XMLHttpRequest) 
{ //Mozilla 浏览器
http_request = new XMLHttpRequest();
if(http_request.overrideMimeType) 
{//设置MiME类别
http_request.overrideMimeType('text/xml');
}
}
else if(window.ActiveXObject) 
{ // IE浏览器
try 
{
http_request = new ActiveXObject("Msxml2.XMLHTTP");

catch(e) 
{
try 
{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e){}
}
}
if(!http_request) 
{ // 异常,创建对象实例失败
window.alert("不能创建XMLHttpRequest对象实例.");
return false;
}
http_request.onreadystatechange = processRequest;
// 确定发送请求的方式和URL以及是否同步执行下段代码
http_request.open("POST", url, true);
http_request.setrequestheader("Content-length",msg.length); 
        http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
http_request.send(msg);
}
// 处理返回信息的函数
    function processRequest() 
    {
        if (http_request.readyState == 4) 
        { // 判断对象状态
            if (http_request.status == 200) 
            { // 信息已经成功返回,开始处理信息
            }
        }
       
   } 
</script>
在action里面System.out.println("参数是:"+this.getMsg());结果是问号。

解决方案 »

  1.   

    var url=" <%=request.getContextPath()%>/loadmessage.action?msg="+msg; 
    改为:var url=" <%=request.getContextPath()%>/loadmessage.action?msg="+encodeURI(msg); 
      

  2.   

    1>.
    var url="<%=request.getContextPath()%>/loadmessage.action?msg="+encodeURI(msg); 2>.
    在Action中对msg URLDecoder。
      

  3.   

    我也刚解决了这个问题,楼上正解。
    归纳一下:有三点注意:
        1.统一用utf-8;
       2.js发送数据一定要是encodeURI(msg)
       3.注意get和post的区别,get和直接写在url里面的,不会被过滤器过滤。而post会。
      

  4.   

    在Action中对msg 进行处理下
      

  5.   

    看你这页面编码是否是utf-8 编译器编码
      

  6.   

    encodeURI(msg);页面用utf-8编码就可以了 
      

  7.   

    我在后台是直接使用get set方法取出参数的,按他们的做法用System.out.println("参数是:"+URLDecoder.decode(msg));还是乱码,不知道怎么回事!
      

  8.   

    调试一下查看是不是JSP传值的时候 就已经乱码了。
      

  9.   

    get请求,请求方中文要进行urlencoder编码,接收时要urldecoder解码
      

  10.   

    前台:
    var url=" <%=request.getContextPath()%>/loadmessage.action?msg="+<%=URlEncoder.encode(msg)%>;
    后台:
    request.setCharacterEncoding("utf-8");
    UrlDecoder.decode(request.getParameter("msg"));
      

  11.   

    前台JSP用encodeURI(encodeURI(keyword)))进行编码,后台用java中用URLDecoder.decode(getKeywords(), "utf-8")进行解码。