Ajax的XMLHttpRequest学习

---恢复内容开始---

我们现在来做这样一个功能:

 当我们在用户名中输入姓名后,我们一点别的地方,它就会自动到数据库中去检查这个用户名是否存在。

 如果说存在的话,在后面用红色的字标出来"该用户名已存在!"

 如果说不存在,在后面也用绿色的字标出来"该用户名可用!" 这样一个功能

但是大家要注意一点:即便是我们做了这个功能,在提交的时候,在我们往数据库中插入一条记录的时候,我们还是需要检查这条记录是否存在(因为可能存在两个客户同时对这个数据库进行操作,而且输入的用户名相同,并发型操作;解决方法:在往数据库中插入一条记录时,检查用户名是否存在,检查用户名的操作和存储要在同一个transaction中,否则还是可能出现并发)

XMLHttpRequest Properties

readyState:这个对象有5种状态

       1)  0 = uninitialized:说明我这个open方法还没被调用

       2)  1 = loading: 指的是open方法被调用了,send方法还没有被调用

       3)  2 = loaded:  指的是我send方法掉用了,我把请求发出去了,服务器端给了我反馈了,我只得到了反馈的头信息

       4)  3 = interactive:我真在和服务器端进行交互之中

       5)  4 = completed:和服务器交互完成

Basic method:

 1.open(method,url,boolean) :open的意思:是我准备打开,准备去访问url指定的页面了。真正什么时候去访问,调用send()方法,这个请求会被发出去

      1.method can be "GET" ,"POST" ,"PUT" ,"DELETE"

      2.URL must be an HTTP URL(start with "http://")

      3.boolean:是一个boolean的值,代表是(true)异步的,还是(false)同步的

 2.send():当调用send的时候,这个请求会被发送出去

调用方式:

 

主要的javascript代码:

 

<script type="text/javascript">
   var req;
   function validate(){
    
    var idField = document.getElementById("userid");//拿到id=userid的input
    var url = "Validate.jsp?id=" + escape(idField.value);//我们要发起一个请求,这个请求会发到服务器的某一个页面(validate.jsp),然后由通过页面(validate.jsp)来对这个请求进行验证
    if(window.XMLHttpRequest){//NetScape的创建XMLHttpRequest对象的方法,IE7以后也是这样创建的
       req = new XMLHttpRequest();//XMLHttpRequest这个对象,它可以发起一个请求,这个请求不用刷新页面就能够发送到服务器上
       }
      req.open("GET",url,true);//意思是:请你使用get的方法打开url指定的网页,使用get方式,true表示使用异步的方式打开url指定的网页,如果设为false(同步)就没意义了,所以说一定是true
      req.onreadystatechange = callback;//当readyState对象的状态改变的时候,调用callback方法
      req.send(null);//我们向validate.jsp页面发送了一个请求,服务器端有没有给我反馈呀?反馈内容对不对呀?那么这时候怎么办呢?
      //onreadystatechange是指readyState这个对象的状态
   }
   function callback(){
        alert(req.readyState);
        if(req.readyState ==4){
           alert(req.status);//当没有找到Validate.jsp这个页面时会报404错误,请求没找到相应的页面
             if(req.status == 200){//如果等于200,表示请求找到相应的页面validate.jsp
             
             }
          }
   }
  
  </script>

 

 Validate.jsp 可以在这里面连接数据库,并对数据库进行操作

<%
response.setContentType("text/xml"); //反馈给客户端的文本格式为XML格式的
response.setHeader("Cache-Control","no-store");//HTTP1.1 ,支持HTTP1.1协议的,不让其缓存接下来的3句话是阻止缓存,不予许我们的浏览器对我们的页面进行缓存,写Ajax的引用的时候必须阻止我们客户端的缓存,不然代码缓存在哪里,会出各种各样的错误
response.setHeader("Pragma","no-cache");//HTTP1.0 支持HTTP1.0协议的
response.setDateHeader("Expires",0);//prevents catching at proxy server 阻止缓存,不让我们的代理服务器缓存
response.getWriter().write("<msg>invalid</msg>");

%>

  

 

posted @ 2013-04-15 14:39  springstudent  阅读(308)  评论(0编辑  收藏  举报