微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax学习笔记4

摘要

本节主要介绍两点:1.缓存问题 2.中文问题

缓存问题:

何谓缓存问题?即当浏览器的输入内容相同,即请求的URL相同,这样浏览器就会去读缓存,两次的内容一样,就不会和服务器端进行交互。

解决方式:在请求的url中加上时间戳。

通过我的测试,IE、360两次用户名输入一致时不会和服务器端交互,firefox即使两次用户名输入的一样,仍然会和服务器端交互。

即:firefox的中服务器端返回的temp值会每次加1,IE、360就不会改变。故加上时间戳在这三种浏览器中都不会再有缓存问题。

修改代码

AJAXServer.java 缓存问题

//缓存问题加的测试代码     输入内容不变IE、360次数增加,firefox会增加 
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);



在AJAXServer.java 加入以上代码,同时out.println的时候把temp变量加进去返回给客户端。

这样,如果客户端的temp值加入,就表示客户端和服务器端进行了交互,否则就没有。

verify.js


 
// 给URL地址增加时间戳,骗过浏览器,不读取缓存
function convertURL(url) {
    // 获取时间戳
    var timestamp = (new Date().valueOf());
    // 将时间戳信息拼接到url上
    // url=“AJAXServer”
    if (url.indexOf("?") >= 0) {
        url = url + "&t=" + timestamp;
    } else {
        url = url + "?t=" + timestamp;
    }
    return url;
}
function verifyCache() {
    var url = "AJAXServer?name=" + $("#username").val();
    url = convertURL(url);
    // 缓存
    $.get(url,null,function(data) {
                $("#result").html(data);
            });
}}

由于只是问了验证和介绍缓存问题,为了便于说明问题,故采用的校验方式是jquery封装ajax接收服务器端文本数据。

》》》同样,别忘记了修改ajax.html中调用方法名称改为上述脚本中的verifyCache()

中文问题:

有两种解决方式:

第一种:页面端使用一次encodeURI,服务器端用String name=new String(old.getBytes("iso8859-1"),"UTF-8");

function verifychinese1(){   
    var url="AJAXServer?name="+encodeURI($("#username").val());  
    url=convertURL(url);   
    // 缓存
    $.get(url,function(data){   
        $("#result").html(data);
    });
}
 


》》》在verify.js中加入上述方法,同时把
String name=new String(old.getBytes("iso8859-1"),"UTF-8");

加入到AJAXServer.java类中的适当的位置。比如放在PrintWriter这句代码后面就可以。

同样,用第一种方式时,别忘记了修改ajax.html中调用方法名称改为上述脚本中的verifychinese1()



第二种:页面端使用两次encodeURI,服务器端用String name= URLDecoder.decode(old,"UTF-8");

function verifychinese2() {
    var url = "AJAXServer?name=" + encodeURI(encodeURI($("#username").val()));
    url = convertURL(url);
    // 缓存
    $.get(url,function(data) {
                $("#result").html(data);
            });
}}

》》》在verify.js中加入上述方法,同时把 String name= URLDecoder.decode(old,"UTF-8"); 加入到AJAXServer.java类中的适当的位置。比如放在PrintWriter这句代码后面就可以。 同样,用第二种方式时,别忘记了修改ajax.html中调用方法名称改为上述脚本中的verifychinese2() 需要源码的可以留言。 通过几天的学习,ajax的动态的验证基本有所了解,后续会根据情况增加相应的内容

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐