Ajax url中文参数问题

2016-08-06  本文已影响0人  会飞的猪姥姥

今天学习了Ajax,利用Ajax无刷新检查用户名是否存在,代码如下:

<script type="text/javascript">
    function checkCtype() {
        var ctype = document.getElementById("ctype").value;
        var xmlhttp;
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
        xmlhttp.onreadystatechange=function()
          {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                if (xmlhttp.responseText == "true") {
                    document.getElementById("repeat").innerHTML="已经存在";
                } else {
                    document.getElementById("repeat").innerHTML="可以添加";
                }
            }
          }
        var url = "/HelloWeb/categoryServlet?status=checkCtype&ctype=" + ctype;
        url = encodeURI(url); 
            url=encodeURI(url); 
        xmlhttp.open("POST",url,true);
        xmlhttp.send();
    }   

利用XMLHttpRequest对象向后台传送数据,参数加在url中。然而问题出现了,我的整个java web项目全部统一编码为UTF-8,但是中文参数在后台还是出现乱码,经过网上查询后,有一种方法,即对中文进行编码,使得传到后台的参数没有中文,然后再后台进行解码。
如上所示,在JS代码中需要对中文参数进行两次encodeURL(),那么为什么需要两次encodeURL()呢?
因为第一次编码,会将中文编成‘%xy’的格式,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,如果没有%,xy是不能解码为原来的中文,所以必须再次编码,将‘%’编码为‘%25’,解码的时候‘25’就解码为‘%’,从来还原中文。
以上是客户端的编码,需要在服务器端进行解码。

String ctype = URLDecoder.decode(request.getParameter("ctype"),"utf-8");

这样就没有问题了。

上一篇下一篇

猜你喜欢

热点阅读