ajax的初次使用与解决缓存问题

来源:互联网 发布:ae视频软件 编辑:程序博客网 时间:2024/05/21 08:52

1、ajax核心代码: (a.jsp代码)

<script type="text/javascript">
    var req;    
    function v()
    {    
        var idField = document.getElementById("loginname");
        var url = "../registerusercheckloginname?rand="+Math.random()+"&loginname=" + idField.value;
        if(window.XMLHttpRequest) {
            req = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            req = new ActiveXObject("Microsoft.XMLHTTP");
        }
        req.open("GET", url, true);
        req.onreadystatechange = callback;
        req.send(null);      
    }

    function setMsg(msg) {
        mdiv = document.getElementById("usermsg");
        if(msg == "no") {
            mdiv.innerHTML = "登录名已经存在,请修改当前的登录名!";
        }if(msg=="yes"){
        
            mdiv.innerHTML = "";
        }
    }
    
    function callback(){
        if(req.readyState == 4) {
            if(req.status == 200) {             
                setMsg(req.responseText);
            }
        }
    }   
</script>

注:在a.jsp页面中加上:

<td width="76%"><table><tr><td><input type="text" name="loginname" maxlength="30" size="18" onBlur="v()"><font color="red">*</font><td style="color:red"><span style="font-size: 10px;" id="usermsg"></span></table></td>

 

2、registerusercheckloginname(servlet代码:)

public class registerusercheckloginname extends HttpServlet {
    public registerusercheckloginname() {
        super();
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request,response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out = response.getWriter();  
        DBConnect dbc = null;   
        ResultSet rs=null;
        String loginname=(String)request.getParameter("loginname");  
        try{
            dbc  = new DBConnect();
            dbc.prepareStatement("select * from ams_user where loginname=?");//成功
            System.out.println("logname="+loginname);
            PreparedStatement pre=dbc.getPreparedStatement();
            pre.setString(1,loginname);   
            rs = pre.executeQuery();       
            if(rs.next()){ 
              out.write("no");              
            } else
                  out.write("yes");
        }catch(Exception e){}      
    }
}

3、缓存问题解决方法:

a:在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数
在javascript发送的URL后加上t=Math.random()
当然,不是直接把t=Math.random()拷贝到URL后面,应该像这样:URL+"&"+"t="+Math.random();


b:在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
一般情况下,这里的XMLHttpRequest不会直接使用
你应该可以找到这样的代码
XXXXX.send(YYYYYY);
那么,就把它变成
XXXXX.setRequestHeader("If-Modified-Since","0");
XXXXX.send(YYYYYY);
第二种方法感觉挺好