zoukankan      html  css  js  c++  java
  • 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>");
    
    %>
    

      

  • 相关阅读:
    [对对子队]会议记录5.27(Scrum Meeting12)
    [对对子队]会议记录5.25(Scrum Meeting11)
    [对对子队]会议记录5.24(Scrum Meeting10)
    [对对子队]会议记录5.22(Scrum Meeting9)
    [对对子队]会议记录5.21(Scrum Meeting8)
    [对对子队]会议记录5.20(Scrum Meeting7)
    团队作业第六次——Beta冲刺日志集合
    团队作业第六次——Beta冲刺日志集合
    团队作业第五次——敏捷冲刺日志集合
    Beta冲刺答辩
  • 原文地址:https://www.cnblogs.com/SpringSmallGrass/p/3022067.html
Copyright © 2011-2022 走看看