在ajax中解决浏览只读取缓存和中文字符乱码问题

实现原理:我们把提交到服务器端的URL的地址在每次提交时都让它与上一次不同,大家就会想到时间,这样服务器每次都接收到不同的URL,就不会读取缓存了。

解决中文乱码通常的2种方法:

//1.页面端发出的数据做一次encodeURI,服务器端使用new String(name.getBytes("iso8859-1"),"UTF-8");
//2.页面段发出的数据作两次encodeURI,服务器端使用RLDecoder.decode(nameStr,"UTF-8");

<script type="text/javascript" src="js/jquery-1.4.js"></script>
<script type="text/javascript">
    function testClick(){
        var obj = $("#name");
        var name = obj.val();
        var url = "testServlet?name="+encodeURI(encodeURI(name));  //解决提交的数据乱码问题
        url = convertURL(url);
        //alert(url);
        $.get(url,true,callback);
    }
    //给url地址增加时间戳,骗过浏览器,不读取缓存
    function convertURL(url){
        //获取时间戳
        var timetamp = (new Date()).valueOf();
        //将时间戳信息拼接到url地址上面去
        //url = "testServlet";
        if(url.indexOf("?")>=0){
            url = url + "&t="+timetamp;
        }else{
            url = url + "?t="+timetamp;
        }
        return url;
    }
    function callback(data){
        //alert("服务器的数据回来了!");
        $("#msg").html(data);
    }
</script>

<input id="name" ><input type="button" value="测试" οnclick="testClick()"/>

 <br/><div id="msg"></div>

下面是服务器端:

response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        //定义变量,存储连续请求的次数
        Integer inte = (Integer)request.getSession().getAttribute("total");
        int temp =0;
        if(inte==null){
            temp = 1;
        }else{
            temp = inte.intValue()+1;
        }
        request.getSession().setAttribute("total", temp);
        String nameStr = request.getParameter("name");
        //String name = new String(nameStr.getBytes("iso8859-1"),"UTF-8");
        String name = URLDecoder.decode(nameStr,"UTF-8");
        PrintWriter out = response.getWriter();
        if(name==null || name.length()==0){
            out.print("用户名为空"+temp);
        }else{
            if(name.equals("peter")){
                out.print("用户名"+name+"正确"+temp);
            }else{
                out.print("用户名"+name+"错误"+temp);
            }
        }
        out.flush();
        out.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值