zoukankan      html  css  js  c++  java
  • Ajax使用

    1.传统的web应用请求和响应特点

    (1)请求:浏览器以http的方式提交请求获取服务器响应

    (2)响应:服务器以http协议的方式响应服务器数据。

    http也是一个不安全的协议,https是一个安全的协议,是基于http协议的,且加了一些加密特殊功能,常用于支付等安全的网站中使用。

    HTTP请求有三部分组成:请求行、请求头、请求体。

    HTTP响应有三个部分组成:响应行、响应头、响应头。

    (3).状态栏:有明显的进度条刷新现象,如果服务器响应较慢的话,进度条刷新会变慢。

    (4)历史栏:会收集原来已经访问的历史,进行缓存。

    (5)缺点:不需要变化的大量数据,也会全部刷新,造成浏览器加载和处理负担,是使用效果变差。

    (6)可改进的地方:让不需要变化的大量数据,只是让需要变化的地方发生变化,无需全部刷新

    2.举例:不使用局部刷新的情况。

    客户端代码:

    当前时间:<span>${requestScope.str}</span><br/>    
    <input type="button" value="同步方式提交"/>      
    <script type="text/javascript">
      //定位button按钮,同时添加单击事件
      document.getElementsByTagName("input")[0].onclick = function(){
      var url = "${pageContext.request.contextPath}/TimeServlet?id="+new Date().getTime();
          window.location.href = url;    
      }
    </script>

    服务端代码:

    public class TimeServlet extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            System.out.println("TimeServlet::doGet");
         //返回数据的格式 SimpleDateFormat sdf
    = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = sdf.format(new Date());
         //将时间存入到str变量中 request.setAttribute(
    "str",str);
    request.getRequestDispatcher("/time.jsp").forward(request,response); } }

    它会在点击同步方式提交的时候,将整个页面进行刷新。

    3.ajax的使用

    (1)什么是同步:请求、响应、请求、响应。

    (2)什么是异步:不是一个请求一个响应。可以多个请求多个响应,或者多个响应。

    (3)什么是ajax:客户端与服务器,可以在不刷新的情况下,进行与服务器进行异步通讯的技术,它是一种技术,不是编程语言。

    (4)所有的浏览器都内置了异步对象,但是没有创建出来。

    对于IE浏览器,它的ajax对象是ActiveXObiect,其它是XMLHttpRequest对象。对于高IE也可以使用XMLHttpRequest.

    它无需第三方插件。创建异步对象

    function createAJAX(){
        var ajax = null;
        try{
            ajax = new ActiveXObject("microsoft.xmlhttp");
        }catch(e1){
            ajax = new XMLHttpRequest();
        }
        return ajax;
    }

    4.ajax的开发步骤

    (1)创建一个ajax对象。

    (2)创建url和发送方法

    (3)如果是post请求需要设置请求头

    (4)真正的发送到服务器,如果没有参数,那么就传递一个null;

    (5)他会不断的监听onreadystatechange函数

    (6)使用dom对数据进行操作。

    5.使用ajax的地方

    (1)不需要大量数据时候

    6.应用

    (1)GET练习刷新时间

    当前时间:<span></span><br/>
            <input type="button" value="异步方式提交"/>
    <script type="text/javascript">
            //定位button按钮,同时添加单击事件
            document.getElementsByTagName("input")[0].onclick = function(){
                //1)创建AJAX异步对象(每个浏览器内置的,无需第三方jar包)
                var ajax = createAJAX();//2)AJAX异步对象准备发送请求
                var url = "${pageContext.request.contextPath}/TimeServletAjax?id="+new Date().getTime();
                var method = "GET";
    发送数据之前先将对数据进行封装。
                ajax.open(method,url);//1
                //3)AJAX异步对象真正发送请求体的数据到服务器,如果请求体无数据的话,用null表示
                var content = null;
                ajax.send(content);//2
    //监听onreadystatechange
    //NO4)AJAX异步对象不断监听服务端状态的变化,只有状态码变化了,方可触发函数//以下这个函数是服务器来触发的,不是程序员触发的,这和onclick是不一样的 ajax.onreadystatechange = function(){ //如果AJAX状态码为4 if(ajax.readyState == 4){ //如果服务器响应码是200 if(ajax.status == 200){ //NO5)从AJAX异步对象中获取服务器响应的结果 var str = ajax.responseText; //NO6)按照DOM规则,将结果动态添加到web页面指向的标签中 document.getElementsByTagName("span")[0].innerHTML = str; } } } } </script>

    服务器代码:注意,因为局部新所以不可以使用重定向和转发,应该使用流的方式将数据返回。

    public class TimeServletAjax extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String str = sdf.format(new Date());
            //注意:在Web2.0时代,即异步方式下,不能用转发或重定向
            //因为:转发或重定向会引起浏览器全部刷新,而不是局部刷新
            //所以得用以输出流的方式将服务器的结果输出到浏览器
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter pw = response.getWriter();
            pw.write(str);
            pw.flush();
            pw.close();
        }
    }

    (2)练习post方法,完成用户名效验

        输入用户名:<input type="text" maxlength="8"/><hr/>
        <div></div>
    <script type=”text/javascript”>
        Document.getElementsByTagName(“input”)[0].onclick=function(){
       //创建ajax
    Var ajax
    =createAJAX(); //获取input的值
    Var username
    =document.getElementById(“XXx”).value(); //准备url
    Var url
    =”${pageContext.request.contextPath()}/TimeServlet?id=”+new Date().getTime(); //请求方法是post
    Var method
    =”post”; //打开连接
    Ajax.open(method,url); 、//设置请求头
    ajax.setRequestHeader(
    "content-type","application/x-www-form-urlencoded"); //传入参数的方式是key:value的形式
    var content
    =”username=”+username; Ajax.sent(content);

    //检测状态的变化
    Ajax.onreadystatechanage
    =function(){ If(ajax.readystate==4) If(ajax.status==200) { Var str=ajax.redponseText(); Document.getElementsByTagName(‘div’)[0].innerHTML=str; } } } </script>
    public class RegisterServletPost extends HttpServlet {
        public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            String username = request.getParameter("username");
            String tip = "images/MsgSent.gif";
            if("杰克".equals(username)){
                tip = "images/MsgError.gif";
            }
        response.setContentType("text/html;charset=UTF-8");
            PrintWriter pw = response.getWriter();
            pw.write(tip);
            pw.flush();
            pw.close();
        }
    }

    状态解释:

     (1)事件:onreadystatechange:表示ajax异步对象发生变化,由程序自己触发,不需要手动触发。

    (2)属性:ajax.readystate==0:创建好了ajax;

                        ajax.readystate==1;已经open,但是还没有send

          ajax.readystate==2,:已经send,但是没有到达客户端

          ajax.readystate==3;已经到达客户端,但是正在响应

          ajax.readystate==4;已经接到响应,但是是否正确还不一定。

                     接收到的数据

          ajax.resposeText:表示从AJAX异步对象中获取HTML载体中的数据

          ajax.resposeXML:表示从AJAX异步对象中获取XML载体中的数据

  • 相关阅读:
    switch statement
    Block statement
    Variable hoisting Global variables Constants
    How the Web works
    Discover browser developer tools
    Publishing via GitHub
    第十二节,OpenCV学习(一)图像的读取、显示、保存
    剑指Offer编程题3——从尾到头打印链表
    剑指Offer编程题2——替换空格
    剑指Offer编程题1——二维数组中的查找
  • 原文地址:https://www.cnblogs.com/kw28188151/p/8275202.html
Copyright © 2011-2022 走看看