zoukankan      html  css  js  c++  java
  • AJAX入门

    AJAX介绍

    【1】AJAX简介

    全称:Asynchronous IavaScript And XML(异步的JavaScript和XML)

    AJAX就是通过JavaScript向服务器发送请求,并接收响应,然后我们在通过DOM修改页面。

    XML指的是服务器响应的数据的格式。

    目前AJAX 已经很少使用XML作为响应的格式。因为XML的解析性能及传输性能较差。AJAX可以响应txt、xml、json格式的数据。

    【2】同步和异步

    同步:当我们通过浏览器向服务器发送一个请求时,浏览器会刷新整个页面。

    异步:当我们向服务器发送请求时,不是刷新整个页面,而是只刷新网页的一部分。

    【3】XMLHttpRequest对象

    我们AJAX的所有操作都是围绕着XMLHttpRequest对象进行。
    在XMLHttpRequest对象中封装发送给服务器请求报文,同时在服务器发回响应时,响应信息也会在对象中封装。
    如何获取XMLHttpRequest对象var xhr = new XMLHttpRequest();

    【4】使用步骤

    第一步:创建XMLHttpRequest对象;

    大部分比较新的浏览器都支持的方式(IE7以上)
    var xhr = new XMLHttpRequest();
    IE6以下的浏览器
    var xhr = new ActiveXObject(“Msxml2.XMLHTTP”);
    IE5.5以下的浏览器
    var xhr = new ActiveXObject(“Microsoft.XMLHTTP”);

    通用的获取XMLHttpRequest对象的方法:

    //写一个获取XHR的方法
                function getXMLHttpRequest(){
                    try{
                        //大部分浏览器都支持的方式
                        return new XMLHttpRequest();
                    }catch(e){
                        try{
                            //IE6以下浏览器支持的方式
                            return new ActiveXObject("Msxml2.XMLHTTP");
                        }catch(e){
                            try{
                                //IE5以下的浏览器
                                return new ActiveXObject("Microsoft.XMLHTTP");
                            }catch(e){
                                alert("你是火星来的吧!你的浏览器不支持AJAX!");
                            }
    
                        }
    
                    }
                }

    第二步:设置请求信息(请求地址,请求方式,请求参数)

    xhr.open(请求方式,请求地址);
    在发送post请求时,还需要设置一个请求头,如下:

    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    第三步:发送请求

    xhr.send(请求体);
    get请求没有请求体,所以send中可以传null或什么都不传。
    post请求需要通过send来设置请求参数。

    第四步:接收响应信息

    //xhr绑定一个onreadystatechange响应函数,这个函数会在readyState属性发生改变时调用
                xhr.onreadystatechange = function(){
                    //判断当前readyState是否为4 , 且响应状态码为200
                    if(xhr.readyState==4 && xhr.status==200){
                        //读取响应信息,做相关操作。
                        //如果信息为纯文本
                        var text=xhr.responseText;      
                        //如果信息为XML
                        var xml=xhr.responseXML;
                    }
                };

    第五步:响应数据的格式
    响应的格式有三种:txt、xml、json.


    前端请求处理与后端请求处理

    前端请求处理:就是在第二步设置请求信息时,请求地址为一个xml格式的文件或json格式的文件地址。
    后端请求处理:设置请求信息时,请求地址为一个servlet的地址,在后台处理数据。

    前端请求示例:
    这里写图片描述
    后端请求示例:

    <title>省市联动效果</title>
    <script type="text/javascript">
    /**
     * 1.在文档加载完毕时发送请求,得到所有省份名称显示在province中
     2.在选择了新的省份时,发送请求,得到XML文档
     3.解析xml文档,得到其中所有的<city>,在得到每个<city>元素的内容,即市名,使用市名生成<option>,插入到<select>中
     */
     function createXmlHttpRequest(){
            try{
                return new XMLHttpRequest();//大多数浏览器
            }catch(e){
                 try{
                    return ActvieXObject("Msxml2.XmlHTTP");//IE6.0      
                }catch(e){
                    return ActvieXObject("Microsoft.XMLHTTP");//IE5.0
                } 
            }
        }
     window.onload=function(){
         /**
         ajax四步,请求ProvinceServlet,得到所有省份名称
         使用每个省份名称创建一个<option>元素,添加到<select name=province>中
         */
         var xmlHttp=createXmlHttpRequest();
         xmlHttp.open("GET","/shengshiliandong/ProvinceServlet",true);
        //3.发送请求
            xmlHttp.send(null);//get没有请求体,但也要给出null,不然Firefox可能会不能发送
            //4.给异步对象的onreadystatechange事件注册监听器
            xmlHttp.onreadystatechange=function(){
                //双重判断:服务器响应结束和响应成功
                if(xmlHttp.readyState==4 && xmlHttp.status==200){
                    //获取服务器的响应结束
                    var text=xmlHttp.responseText;
                    //使用,分割他,得到数组
                    var arr=text.split(",");
                    //循环遍历每个省份名称,
                    for( var i=0;i<arr.length;i++){
                        var op=document.createElement("option");//创建一个指定名称元素
                        op.value=arr[i];
                        var textNode=document.createTextNode(arr[i]);//创建文本节点
                        op.appendChild(textNode);//把文本子节点添加到op元素中,指定其显示值
                        document.getElementById("p").appendChild(op);
                    }
                }
            }
     }
    </script>
    </head>
    <body>
    <h2 align="center">演示省市联动</h2>
    <select name="province" id="p">
        <option>===请选择省===</option>
    </select>
    
    <select name="city">
        <option>===请选择市===</option>
    </select>
    </body>

    后端处理代码:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            /**
             * 响应所有省的名称
             */
            //1.Document对象
            //创建解析器对象
            //调用解析器的读方法,传递一个流对象,得到Document
            try {
                SAXReader reader=new SAXReader();
                InputStream input=this.getClass().getResourceAsStream("/china.xml");            
                Document doc=reader.read(input);
                /**
                 * 查询所有province的name属性,得到一堆的属性对象
                 * 循环遍历,把所有的属性连接成一个字符串,发送给客户端
                 */
                List<Attribute> arrList = doc.selectNodes("//province/@name");
                StringBuilder sb=new StringBuilder();
                for(int i=0;i<arrList.size();i++){
                    sb.append(arrList.get(i).getValue());//把每个属性的值存放到sb中
                    if(i<arrList.size()-1){
                        sb.append(",");
                    }
                }
                response.getWriter().print(sb);
            } catch (DocumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    通过jQuery实现AJAX

    [1] post()方法
    $.post(url, [data], [callback], [type])

    参数:
    url:发送AJAX的请求地址,字符串。
    data:发送给服务器的请求参数,JSON格式。
    callback:当前需要获取服务器发送的响应时,我们可以通过该回调函数。
    jQuery会将响应信息以回调函数的参数的形式返回
    type:响应信息的类型,字符串。一般两个常用值text、json

    [2] get()方法
    - get方法和post方法使用方式基本一致。

    [3] getJSON()方法
    getJSON(url, [data], [callback])
    getJSON方法和get方法类似,只不过该方法默认的响应类型为JSON,不需要再手动指定。
    注意:

    使用get和getJSON都会有缓存问题,并且使用get方法不能传送较多的数据。
    post方法不会有缓存的问题,所以我们开发时使用post方法较多。
    不要忘记导jquery文件。

    示例代码:

    <script src="/AJAXTest/js/jquery.min.js"></script>
    <script>
        $(function(){
            $("#btn1").click(function(){
                var url="${pageContext.request.contextPath}/AServlet";
                var json={"username":"zhangsan","age":20};
                function callback(data){
                    /* var div1=document.getElementById("div1");
                    div1.innerHTML+=data;  */
                    /* $("#div1").html(data); */
                     var a=data.split(",");
                    $("#username").val(a[0]);
                    $("#password").val(a[1]);
                }
                $.get(url,json,callback);
            });
        });
    </script>
  • 相关阅读:
    解决DeDeCms文章中上传的图片点击新窗口打开的方法
    织梦dedecms 5.7解决修改文章后,发布时间自动更新的方法
    织梦DedeCMS实用技巧-八大安全措施
    data目录迁移到web以外目录
    《DSP using MATLAB》示例Example6.6
    《DSP using MATLAB》示例 Example 6.5
    《DSP using MATLAB》示例Example6.4
    《DSP using MATLAB 》示例Example6.3
    《DSP using MATLAB》示例Example6.2
    《DSP using MATLAB》示例Example6.1
  • 原文地址:https://www.cnblogs.com/mazhitao/p/7435482.html
Copyright © 2011-2022 走看看