码迷,mamicode.com
首页 > Web开发 > 详细

325 AJAX介绍,XMLHttpRequest对象,实现Ajax的异步交互步骤,服务器端通信状态

时间:2020-02-25 00:17:08      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:tle   技术   getx   状态码   ready   图片   pen   element   console   

* Asynchronous JavaScript and Xml

 \* 直译中文 - javascript和XML的异步

 \* (不严格的定义)客户端与服务器端进行交互,而无需刷新当前页面的技术,称之为Ajax。

* Ajax实现的是B/S架构下的异步交互

* 实现异步交互的技术:

 \* <iframe src="">元素

* 同步与异步的区别

* 同步交互

 \* 执行速度相对比较慢

 \* 响应的是完整的HTML页面

* 异步交互

  \* 执行速度相对比较快

   \* 响应的是部分数据

技术图片

* Ajax具有核心对象:XMLHttpRequest对象

* 创建XMLHttpRequest对象

   function getXhr(){
       // 声明XMLHttpRequest对象
       var xhr = null;
       // 根据不同浏览器创建
       if(window.XMLHttpRequest){
           // 其他浏览器
           xhr = new XMLHttpRequest();
       }else{
           // IE浏览器(8及之前)
           xhr = new ActiveXObject("Microsoft.XMLHttp");
       }
       // 返回XMLHttpRequest对象
       return xhr;
   }

 // 创建核心对象
 var xhr = getXhr();

* Ajax的核心对象

* 属性

     \* readyState

     \* status

* 方法

     \* open() - 与服务器端建立连接

     \* send() - 向服务器端发送请求

* 事件

     \* onreadystatechange事件

     \* 作用 - 监听服务器端的通信状态改变

技术图片

技术图片

技术图片


* 实现Ajax的异步交互步骤**

* 创建XMLHttpRequest核心对象 【实例化更准确】

     \* 固定写法 - 独立编写

* 与服务器端建立连接

     \* 使用XMLHttpRequest对象的open(method,url)方法

             \* method - 设置当前请求的类型

? * url - 设置当前请求的地址

* 向服务器端发送请求

      \* 使用XMLHttpRequest对象的send(请求参数)方法

             \* 请求参数的格式 - key=value

* 接收服务器端的响应数据

    \* 使用XMLHttpRequest对象的onreadystatechange事件,  监听服务器端的通信状态

     \* 使用XMLHttpRequest对象的readyState属性,判断服务器端的当前状态(0-4)

     \* 使用XMLHttpRequest对象的status属性,判断服务器端的状态码(200)

     \* 使用XMLHttpRequest对象的responseText属性,接收服务器端的响应数据。
<!DOCTYPE html>
<html>

<head>
    <title>实现Ajax异步交互</title>
    <meta charset="utf-8" />
</head>

<body>
    <input type="button" value="异步请求" id="btn">
    <script>
        // 实现Ajax的异步交互的步骤

        var btn = document.getElementById("btn");
        btn.onclick = function() {
            /*
             * 1. 实现Ajax主要依靠XMLHttpRequest对象
             *   * 创建XMLHttpRequest对象
             */
            var xhr = getXhr();

            /*
             * 2. 与服务器端建立连接
             *   * open(method,url,async)方法
             *     * method - 设置当前的请求类型(GET或POST)
             *     * url - 设置当前的请求地址
             *     * async - 设置是否异步(Boolean类型)
             *       * 默认值为true,表示异步
             *       * 官方认为使用XMLHttpRequest对象就是为了实现异步交互的
             */
            xhr.open("get", "01.php?user=zhangwuji"); // 【user 必须和后端的字段保持一致】

            /*
             * 3. 客户端向服务器端发送请求
             *   * send(请求参数)方法
             *     * 请求参数的格式 - key=value
             *   * 如果请求类型为GET方式的话
             *     * send()方法是不能向服务器端发送请求数据的
             *   * 注意
             *     * send()方法是不能被省略的
             *       * GET请求类型 - send(null);
             */
            xhr.send(null);

            /*
             * 4. 客户端接收服务器端的响应
             *   * 使用onreadystatechange事件
             *     * 监听服务器的通信状态
             *   * readyState属性
             *     * 得到服务器端当前通信状态
             *     * 备选项
             *       * 0 尚未初始化
             *       * 1 正在接收
             *       * 2 接收完成
             *       * 3 正在响应
             *       * 4 响应完成
             *   * status - 状态码
             *     * 200 OK
             *   * responseText属性
             *     * 接收服务器端的数据(HTML格式)
             */
            xhr.onreadystatechange = function() {
                // 保证服务器端响应的数据发送完毕
                if (xhr.readyState == 4) {
                    // 保证这次请求必须是成功的 【比如url地址错误就是请求失败】
                    if (xhr.status == 200) {
                        var data = xhr.responseText; // 接收服务器端的数据
                        console.log(data); // 测试
                    }
                }
            }
        }


        // 定义创建XMLHttpRequest对象的函数
        function getXhr() {
            // 声明XMLHttpRequest对象
            var xhr = null;
            // 根据不同浏览器创建
            if (window.XMLHttpRequest) {
                // 其他浏览器
                xhr = new XMLHttpRequest();
            } else {
                // IE浏览器(8及之前)
                xhr = new ActiveXObject("Microsoft.XMLHttp");
            }
            // 返回XMLHttpRequest对象
            return xhr;
        }
    </script>
</body>

</html>
<?php
    // 用于处理客户端的Ajax异步请求
    // 1. 接收客户端发送的请求数据
    $user = $_GET['user']; //key = value中的key。
    // 2. 向客户端进行响应
    echo $user.' get request succesful.';
?>

325 AJAX介绍,XMLHttpRequest对象,实现Ajax的异步交互步骤,服务器端通信状态

标签:tle   技术   getx   状态码   ready   图片   pen   element   console   

原文地址:https://www.cnblogs.com/jianjie/p/12359460.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!