原生ajax

101 阅读1分钟
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>

    <body>
        <button onclick="ajax_get()">原生ajax-get</button>
        <button onclick="ajax_post()">原生ajax-post</button>
        <script>
            // 原生ajax - get请求
            function ajax_get() {
                // 1、创建请求对象
                var xhr = new XMLHttpRequest();
                // 2、设置请求方式和请求地址
                xhr.open(
                    "get",
                    "https://autumnfish.cn/search?keywords=海阔天空"
                );
                // 3、发送请求
                xhr.send();
                // 4、监听请求状态事件,请求成功时,获取请求结果
                xhr.onreadystatechange = () => {
                    // readyState状态值有4个:
                    // 1 表示xhr对象已创建,初始化状态值为1
                    // 2 表示设置了请求方式和地址,还没发送
                    // 3 表示请求被发出,还没得到响应
                    // 4 表示已经拿到服务器响应结果
                    if (xhr.readyState == 4) {
                        console.log("get请求成功");
                        // console.log(xhr.responseText);
                        // 把json字符串解析成json对象
                        var result = JSON.parse(xhr.responseText);
                        console.log(result);
                    }
                };
            }

            // 原生ajax - post请求
            function ajax_post() {
                // 1、创建请求对象
                var xhr = new XMLHttpRequest();
                // 2、设置请求方式和请求地址,post请求的url上不加请求参数
                xhr.open("post", "https://autumnfish.cn/search");
                // 3、设置请求头的数据格式,保证服务器可以正确解析请求参数,返回正确的结果
                xhr.setRequestHeader(
                    "Content-Type",
                    "application/x-www-form-urlencoded"
                );
                // 4、发送请求,send函数的参数是请求体,放请求参数
                xhr.send("keywords=海阔天空");
                // 5、监听请求状态事件,请求成功时,获取请求结果
                xhr.onreadystatechange = () => {
                    // readyState状态值有4个:
                    // 1 表示xhr对象已创建,初始化状态值为1
                    // 2 表示设置了请求方式和地址,还没发送
                    // 3 表示请求被发出,还没得到响应
                    // 4 表示已经拿到服务器响应结果
                    if (xhr.readyState == 4) {
                        console.log("post请求成功");
                        // console.log(xhr.responseText);
                        // 把json字符串解析成json对象
                        var res = JSON.parse(xhr.responseText);
                        console.log(res);
                    }
                };
            }

            /* // 由于ajax请求的url路径不支持中文,所以需要把中文转码成url编码才行
            var url = encodeURI("海阔天空");
            console.log(url); // %E6%B5%B7%E9%98%94%E5%A4%A9%E7%A9%BA
            // 把编码后的url格式,解码成原来的中文
            var str = decodeURI(url);
            console.log(str); // 海阔天空
            // 在开发时,不需要手动编码,浏览器会自动执行中文url编码 */

            /* // url路径构成解析,一个url路径由5部分组成
            // https://autumnfish.cn/search?keywords=海阔天空
            // 1、https 请求协议 http,file...
            // 2、autumnfish.cn 服务器域名或ip
            // 3、443 服务器端口号 http协议的默认端口80 https默认端口443 默认端口可以省略
            // 4、/search 服务器接口路径
            // 5、?keywords=海阔天空&page=3 查询字符串:以键值对形式表示数据,多个数组用&分割 */
        </script>
    </body>
</html>