zoukankan      html  css  js  c++  java
  • Ajax详解

    1、Ajax是什么?
    Asynchronous javascript and xml :异步的JS和XML
    2、异步交互和同步交互
    同步
    --->发一个请求,就要等待服务器的响应结束。然后才能发第二个请求!中间这段时间就是一个字“卡”
    --->刷新的是整个页面!!
    异步
    --->发一个请求后,无需等待服务器的响应,然后就可以发第二个请求!
    --->可以使用JS结束服务器的响应,然后使用JS来局部来机新
    3、Ajax常见应用场景
    百度搜索框
    用户注册时(用户名是否已被注册)
    4、Ajax的优缺点
    优点
    --->异步交互;增强了用户的体验!
    --->性能:因为服务器无需再响应整个页面,只需要响应部分内容,所以服务器的压力减轻了
    缺点:
    Ajax不能应用在所有场景!
    Ajax无端的增多了对服务器的访问次数,给服务器到来了压力!


    Ajax发送异步请求(四步操作)
    1、第一步
    Ajax其实只需学习一个对象:XMLHttpRequest,如果掌握了他,就掌握了Ajax!!
     
    得到XMLHttpRequest
    •     大多数浏览器都支持:var xmlHttp=new  XMLHttpRequest();
    •     IE6.0:var xmlHttp =new ActiveXObject("Microsoft.XMLHTTP");
    •     编写创建XMLHttpRequest对象的函数
     
    functioncreateXMLHttpRequest(){
        try{
            return new XMLHttpRequest();
        }catch(e){
            try{
                return new ActiveXObject("Msxml2.XMLHTTP");
            }catch(e){
                try{
    return new ActiveXObject("Microsoft.XMLHTTP");
                }catch(e){
                     alert(哥儿们,你用的是什么浏览器???);   
                      throw e;
                }
            }
        }
    }
    2、第二步(打开服务器的连接)
    ---xmlHttp.open();用来打开与服务器的连接,它需要三个参数:
        》请求方式:可以是GET或POST
        》请求的URL:制定服务器端资源,例如:/day1/AServlet
        》请求是否为异步:如果为true表示发送异步请求,否则为同步请求!
    ---xmlHttp.open("GET","/day1/AServlet",true);
    3、第三步(发送请求)
    ---xmlHttp。send(null);如果不给可能会造成部分浏览器无法发送!
    》 参数:就是请求体内容!如果是GET请求,必须给出null。
    4、第四步()
    ---在xmlHttp对象的一个事件上注册监听器:onreadystatechange
    ---xmlHttp对象一共有5个状态:
    》0状态:刚创建,还没有调用open方法;
    》1状态:请求开始:调用了open方法,但还没有调用send()方法
    》2状态:调用玩了send()方法;
    》3状态:服务器已经开始响应,但不表示响应结束!
    》4状态:服务器响应结束!(通常我们只关心这个状态)
    ---得到xmlHttp对象的状态:
    》var state=xmlHttp.readState;//可能是0、1、2、3、4
    ---得到服务器响应的状态码
    》var status=xmlHttp.status;//例如200、404、500
    ---得到服务器响应的内容
    》var content =xmlHttp.responseText;//得到服务器的响应的文本格式的内容
    》var content =xmlHttp.responseXML;//得到服务器的响应的XML响应的内容,它是Document对象了!
    xmlHttp.onreadystatechange=function(){//xmlHttp的5种状态都会调用本方法
        if(xmlHttp.readyState==4 && xmlHttp.status==200){//双重判断:判断是否为4状态,而且还要判断是否为200
            //获取服务器的响应内容
            var text =xmlHttp.responseText;
        }
    };
    第二例:发送POST请求(如果发送请求时需要带有参数,一般都用POST请求)
    * open:xmlHttp.open("POST" ....);
    * 添加一步:设置Content-Type请求头:
      > xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    * send:xmlHttp.send("username=zhangSan&password=123");//发送请求时指定请求体
    ==========================================
    ==========================================
    第三例:注册表单之校验用户是否注册!
    1. 编写页面:
      * ajax3.jsp
        > 给出注册表单页面
        > 给用户名文本框添加onblur事件的监听
        > 获取文本框的内容,通过ajax4步发送给服务器,得到响应结果
          * 如果为1:在文本框后显示“用户名已被注册”
          * 如果为0:什么都不做!
    2. 编写Servlet
      * ValidateUsernameServlet
        > 获取客户端传递的用户名参数
        > 判断是否为itcast
          * 是:返回1
          * 否:返回0
    ==========================================
    ==========================================
    响应内容为xml数据
      * 服务器端:
        > 设置响应头:ContentType,其值为:text/xml;charset=utf-8
      * 客户端:
        > var doc = xmlHttp.responseXML;//得到的是Document对象!
    =====================
    第四例:响应内容为xml数据
    ==========================================
    ==========================================
    第五例:省市联动
    1. 页面
      <select name="province">
        <option>===请选择省份===</option>
      </select>
      <select name="city">
        <option>===请选择城市===</option>  
      </select>
    2. ProvinceServlet
      * ProvinceServlet:当页面加载完毕后马上请求这个Servlet!
        > 它需要加载china.xml文件,把所有的省的名称使用字符串发送给客户端!
    3. 页面的工作
      * 获取这个字符串,使用逗号分隔,得到数组
      * 循环遍历每个字符串(省份的名称),使用每个字符串创建一个<option>元素添加到<select name="province">这个元素中
    4. CityServlet
      * CityServlet:当页面选择某个省时,发送请求!
      * 得到省份的名称,加载china.xml文件,查询出该省份对应的元素对象!,把这个元素转换成xml字符串,发送给客户端
    5. 页面的工作
      * 把<select name="city">中的所有子元素删除,但不要删除<option>===请选择城市===</option>
      * 得到服务器的响应结果:doc!!!
      * 获取所有的<city>子元素,循环遍历,得到<city>的内容
      * 使用每个<city>的内容创建一个<option>元素,添加到<select name="city">
    ==========================================
    ==========================================
  • 相关阅读:
    Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)
    Luogu 1314 【NOIP2011】聪明的质检员 (二分)
    Luogu 1315 【NOIP2011】观光公交 (贪心)
    Luogu 1312 【NOIP2011】玛雅游戏 (搜索)
    Luogu 1525 【NOIP2010】关押罪犯 (贪心,并查集)
    Luogu 1514 引水入城 (搜索,动态规划)
    UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
    Luogu 1437 [HNOI2004]敲砖块 (动态规划)
    Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)
    HDU 1176 免费馅饼 (动态规划)
  • 原文地址:https://www.cnblogs.com/xld21/p/8135860.html
Copyright © 2011-2022 走看看