欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ajax-实现Ajax异步交互的具体步骤

程序员文章站 2022-05-02 19:02:54
...

Ajax

实现Ajax异步交互

1.实现Ajax的执行步骤

实现Ajax异步交互需要服务器端逻辑进行配合,而作为客户端的HTML页面需要完成以下步骤:

1. 创建 Ajax的核心对象XMLHttpRequest对象
  1. 通过XMLHttpRequest对象的open(方法与服务器端建立连接
  2. 构建请求所需的数据内容,井通过XMLHttpRequest对象的send(方法发送给服务器端
  3. 通过XMLHttpRequest 对象提供的onreadystatechange事件监听服务器端的通信状态
  4. 接收并处理服务器端向客户端响应的数据结果
  5. 将处理结果 更新到HTML页面中

2.创建Ajax的核心对象

虽然XMLHttpRequest对象目前由W3C组织进行标准化,但在不同浏览器中,创建的方式略有不同。

创建 Ajax的核心对象XMLHttpRequest对象的代码:


function createXMLHttpRequest(){
    var httpRequest;
    if (window.XMLHttpRequest){
        // 适用于chrome,Firefox,Safari,....
        httpRequest = new XMLHttpRequest();
    }else if (window.ActiveXObject){// 适用于IE浏览器
        try{
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");// IE 7+
        }catch(e){
            try{
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); // IE 6-
            }catch(e){}
        }    
    
    }
    return httpRequest;
}

3.实现Ajax异步交互的代码及效果

代码:

<button id="btn">按钮</button>
    <script src="./js/ccreatXMLHttpRequest.js"></script>
    <script>
        var btn = document.getElementById('btn');
        btn.addEventListener('click',function(){
            // 实现Ajax的异步交互

            // 1.创建XMLHttpRequest对象
            var xhr = createXMLHttpRequest();
            /* 
                2. 调用XMLHttpResquest对象
                    * 作用 - 与服务器端建立连接
                    open(method,url)方法
                    * method - 表示当前的请求方式
                        * 常见的请求方式为GET和POST
                    * url - 表示当前请求的服务器端地址链接
            */        
            xhr.open('get',"http://127.0.0.1:5500/01-%E6%B5%8B%E8%AF%95XMLHttpRequest.html");
            /* 3. 调用XMLHttpResquest对象的send()方法
                    *作用 - 将客户端页面的数据发送给服务器端
                    send() 方法
                    * 如果不传递任何数据内容时 - 向该方法传递null
            */
            xhr.send(null);
            /* 4.利用XMLHttpequest对象的onreadystatecahnge事件
                * 作用 - 用于监听服务器端的通信状态
                * 服务器端的通信状态中 - 存在着处理完毕(信号)
                    * 接收服务器端返回的处理结果
            */
            xhr.onreadystatechange = function(){ // 监听服务器端的通信状态
               /*
                    XMLHttpRequest对象的readyState属性
                    * 作用 - 表示服务器的通信状态
                    * 值
                        * 0 - 未初始化
                        * 1 - open() 方法被调用
                        * 2 - send() 方法被调用
                        * 3 - 正在响应
                        * 4 - 响应已完毕
               */
                if(xhr.readyState === 4 ){
                    /*
                        接收服务器端返回的处理结果
                        XMLHttpRequest 对象的responseText属性
                        * 作用 - 用于接收服务器端的相应结果
                    */
                   console.log(xhr.responseText);
                }
           }
            // 5. 将接受到的结果更新到HTML页面
        });
    </script>

注解:输出获取的请求到的数据

效果:

Ajax-实现Ajax异步交互的具体步骤

4. readyState 属性

(1)XMLHttpRequest 对象的 readyState 属性

  • 作用 - 表示服务器的通信状态

​ 0 - 未初始化

​ 1 - open() 方法被调用

​ 2 - send() 方法被调用

​ 3 - 正在响应

​ 4 - 响应已完毕

(2)XMLHttpRequest对象的status属性

  • ​ 作用 - 得到当前请求之后的响应状态码
  • ​ 200 - 表示请求成功
  • ​ 304 - 表示请求的资源未变化(转向获取本地缓存)
  • ​ 404 - 表示服务器端地址未找到

(3)接收服务器端响应的结果

  • responText属性 - 专门接收字符串类型的结果内容
  • responseXML属性 - 专门接收XML数据格式的结果内容
<script>
        var btn = document.getElementById('btn');
        btn.addEventListener('click',function(){
            // 实现Ajax的异步交互

            // 1.创建XMLHttpRequest对象
            var xhr = createXMLHttpRequest();
            /* 
                4.利用XMLHttpequest对象的onreadystatecahnge事件
            */
            xhr.onreadystatechange = function(){ // 监听服务器端的通信状态
               /*
                    XMLHttpRequest对象的readyState属性
                    * 作用 - 表示服务器的通信状态
                    * 值
                        * 0 - 未初始化
                        * 1 - open() 方法被调用
                        * 2 - send() 方法被调用
                        * 3 - 正在响应
                        * 4 - 响应已完毕
               */
                //console.log(xhr.readyState);
                if(xhr.readyState === 4){
                    /*
                        保证当前的异步请求一定是正确的
                        * XMLHttpRequest对象的status属性
                            * 作用 - 得到当前请求之后的响应状态码
                                * 200 - 表示请求成功
                                * 304 - 表示请求的资源未变化(转向获取本地缓存) 
                                * 404 - 表示服务器端地址未找到
                    */
                    console.log(xhr.status);
                    if(xhr.status === 200){
                        /*
                            接收服务器端响应的结果
                            * responText属性 - 专门接收字符串类型的结果内容
                            * responseXML属性 - 专门接收XML数据格式的结果内容
                        */
                        console.log(xhr.responseText);
                    }
                }
                // if(xhr.readyState === 4 && xhr.status === 200){
                //     console.log(xhr.responseText);
                // }
           }
            /* 
                2. 调用XMLHttpResquest对象
            */        
            xhr.open('get',"http://127.0.0.1:5500/01-%E6%B5%8B%E8%AF%95XMLHttpRequest.html");
            /* 3. 调用XMLHttpResquest对象的send()方法
            */
            xhr.send(null);


            // 5. 将接受到的结果更新到HTML页面
        });
    </script>

5. send()方法

向服务器端发送请求数据

send(data)方法

  1. 参数data - 表示要向服务器端发送的请求数据

  2. 请求方式

  • ​ 如果当前的请求方式为GET的话 - send()方法中只能传递null的值
  • ​ 将请求数据添加到请求地址链接中
  1. 两种情况

​ (1.)发送数据 - ?user=185&pwd=45

​ 请求数据的格式

					如果具有多个请求数据的话,之间使用“&”进行分割

​ 每个数据格式 -> name = value

​ (2.) 不发送数据 - send() 方法中必须传递null值,而不能为空

  1. 代码

    <script>
            var btn = document.getElementById('btn');
            btn.addEventListener('click',function(){
                // 实现Ajax的异步交互
    
                // 1.创建XMLHttpRequest对象
                var xhr = createXMLHttpRequest();
                /* 
                    4.利用XMLHttpequest对象的onreadystatecahnge事件
                */
                xhr.onreadystatechange = function(){ // 监听服务器端的通信状态
                    //console.log(xhr.readyState);
                    if(xhr.readyState === 4){
                        console.log(xhr.status);
                        if(xhr.status === 200){
    
                            console.log(xhr.responseText);
                        }
                    }
               }
                /* 
                    2. 调用XMLHttpResquest对象
                */        
                xhr.open('get',"http://127.0.0.1:5500/01-%E6%B5%8B%E8%AF%95XMLHttpRequest.html?user=185&pwd=456");
                /* 3. 调用XMLHttpResquest对象的send()方法
                        向服务器端发送请求数据
                        send(data)方法
                        * 参数data - 表示要向服务器端发送的请求数据
                        * 请求方式
                            * 如果当前的请求方式为GET的话 - send()方法中只能传递null的值
                                * 将请求数据添加到请求地址链接中
                        * 两种情况
                            * 发送数据 - ?user=185&pwd=456
                                * 请求数据的格式
                                1. 如果具有多个请求数据的话,之间使用“&”进行分割
                                2. 每个数据格式 -> name = value
                            * 不发送数据 - send() 方法中必须传递null值,而不能为空
                */
                // 人为方式获取当前的数据,构建成指定的数据格式
                xhr.send("null");
    
    
                // 5. 将接受到的结果更新到HTML页面
            });
    
  2. 效果图

    Ajax-实现Ajax异步交互的具体步骤