Day01-Ajax

一.JSON方法

javascript 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <table>
        <tr>
            <th>id</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>性别</th>
        </tr>

        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </table>

    <script>
        var data = [
            {
                "id": "0001",
                "name": "张三",
                "age": 18,
                "gender": "男"
            },
            {
                "id": "0002",
                "name": "李四",
                "age": 20,
                "gender": "女"
            },
            {
                "id": "0003",
                "name": "王五",
                "age": 18,
                "gender": "男"
            }
        ]

        console.log(data);

        // 将数组对象形式的数据转换为 json 格式
        var dataStr = JSON.stringify(data);
        console.log(dataStr);

        // 将 json 格式的数据转换为数组对象形式
        var data2 = JSON.parse(dataStr);
        console.log(data2);


        var table = document.querySelector("table");
        data2.forEach(function (value, index) {
            table.innerHTML += `<tr>
                                    <td>${value.id}</td>
                                    <td>${value.name}</td>
                                    <td>${value.age}</td>
                                    <td>${value.gender}</td>
                                </tr>`
        })

    </script>

</body>

</html>

二.Ajax使用

javascript 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>

        // 1.创建XMLHttpRequest对象
        var xhr = new XMLHttpRequest();

        // 2.Ajax向服务器发起请求  open("请求方式","请求地址")
        xhr.open("GET", URL);
        xhr.open("POST", URL);

        // 3.设置请求头

        // GET请求不需要设置请求头

        // post请求需要设置请求头
        // 默认格式 (窗体格式)    ?userName=1234&psd=abcd
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        // json格式
        xhr.setRequestHeader("Content-Type", "application/json");

        // 4.发送请求
        // get的一般不用send
        xhr.send(null);
        // post方法携带传递信息
        xhr.send(content);
        // name="田鹏鹏"&age=18
        // {"name":"田鹏鹏","age":18}

        // 5.获取响应,监听请求状态的改变
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                console.log("请求完成");

                // 完善的判断信息
                if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
                    console.log("请求成功");

                    // 拿到响应信息
                    console.log(xhr.response);
                    // 响应正文
                    console.log(xhr.responseText);

                    // ... 

                    var data = JSON.parse(xhr.responseText);

                    // ... 
                }
            }
        }

        
    </script>

</body>

</html>

三.get请求

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <input type="text"><button class="search">搜索</button><button>添加</button>

    <table border="1" cellspacing="0" cellpadding="10">
        <tr>
            <th>班级</th>
            <th>学号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>爱好</th>
            <th>手机号</th>
            <th>地址</th>
            <th>备注</th>
            <th>日期</th>
            <th>操作</th>
        </tr>
    </table>

    <script>

        // 获取table
        var table = document.querySelector("table");
        // 获取搜索框
        var search = document.querySelector("input");
        // 获取搜索按钮
        var sbtn = document.querySelector(".search");

        var data;
        sbtn.onclick = function () {
            if (search.value) {
                data = search.value;
            } else {
                data = "";
            }

            table.innerHTML = `<tr>
                                <th>班级</th>
                                <th>学号</th>
                                <th>姓名</th>
                                <th>性别</th>
                                <th>年龄</th>
                                <th>爱好</th>
                                <th>手机号</th>
                                <th>地址</th>
                                <th>备注</th>
                                <th>日期</th>
                                <th>操作</th>
                            </tr>`;

            // 1.创建 XMLHttpRequest 对象
            var xhr = new XMLHttpRequest();

            // 2.发起请求 open()
            xhr.open("GET", "http://localhost:3008/api/student/getStudent?id=" + data);

            // 3.设置请求头

            // 4.发送请求 send()
            xhr.send();

            // 5.监听状态改变 onreadystatechange()
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
                        console.log(xhr.responseText);      // json
                        var data = JSON.parse(xhr.responseText);
                        console.log(data);

                        data.forEach(function (value) {
                            table.innerHTML += `<tr>
                                        <td>${value.clazz}</td>
                                        <td>${value.id}</td>
                                        <td>${value.name}</td>
                                        <td>${value.gender}</td>
                                        <td>${value.age}</td>
                                        <td>${value.hobby}</td>
                                        <td>${value.tel}</td>
                                        <td>${value.address}</td>
                                        <td>${value.remark}</td>
                                        <td>${value.date}</td>
                                        <td>
                                            <button>编辑</button>
                                            <button>删除</button>
                                        </td>
                                    </tr>`
                        })
                    }
                }
            }
        }



    </script>

</body>

</html>

四.post请求

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script src="./05-ajax封装.js"></script>
</head>

<body>

    <script>

        // // 1.创建 XMLHttpRequest 对象
        // var xhr = new XMLHttpRequest();

        // // 2.发起请求 open()
        // xhr.open("POST", "http://localhost:3008/api/student/addStudent");

        // // 3.设置请求头
        // // 窗体格式  "?name='张三'&age=18"
        // // xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        // xhr.setRequestHeader("Content-Type", "application/json");

        // // 4.发送请求 send()
        // // 必传参数: clazz班级 name 姓名  gender 性别 age 年龄 tel 电话 address 地址信息 remark 备注信息
        // // var data = "clazz='火花239'&name='丁方园'&age=23&tel=13888888888&address='兰考'&remark='游戏大神'"

        // var data = [
        //     {
        //         calzz: "火花239",
        //         name: "胡定海",
        //         age: 60,
        //         tel: 13666666666,
        //         address: "信阳",
        //         remark: "信阳彭于晏"
        //     }
        // ]
        // xhr.send(JSON.stringify(data));

        // // 5.监听 
        // xhr.onreadystatechange = function () {
        //     if (xhr.readyState === 4) {
        //         if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
        //             console.log(xhr.response);
        //         }
        //     }
        // }

        var data = {
            calzz: "火花239",
            name: "侯志强",
            age: 18,
            tel: 13666666666,
            address: "信阳",
            remark: "信阳彭于晏"
        }
        postData(data, "http://localhost:3008/api/student/addStudent", function (xhr) {
            console.log(xhr.response);
        })

    </script>

</body>

</html>

五.Ajax封装

javascript 复制代码
// 封装get请求
function getData(data, url, fun) {
    // 1.创建对象
    var xhr = new XMLHttpRequest();
    if (!data.includes("=")) {
        data = formData(data);
    }
    url += "?" + data;
    // 2.发起请求
    xhr.open("GET", url);

    // 3.发送请求
    xhr.send();

    // 4.监听状态改变
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
                console.log(xhr.responseText);
                fun(xhr);
            }
        }
    }
}


// 数据转换为窗体格式
function formData(data) {
    var arr = [];
    for (var key in data) {
        arr.push(key + "=" + data[key]);
    }
    data = arr.join("&");
    return data;
}


// 封装 post 请求
function postData(data, url, fun) {
    // 1.创建对象
    var xhr = new XMLHttpRequest();
    // 2.发起请求
    xhr.open("POST", url);
    // 设置请求头
    if (data instanceof Object) {
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.send(JSON.stringify(data));
    } else {
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send(data);
    }
    // 4.监听状态改变
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
                console.log(xhr.responseText);
                fun(xhr);
            }
        }
    }
}
相关推荐
周亚鑫5 分钟前
vue3 pdf base64转成文件流打开
前端·javascript·pdf
落魄小二14 分钟前
el-table 表格索引不展示问题
javascript·vue.js·elementui
y52364815 分钟前
Javascript监控元素样式变化
开发语言·javascript·ecmascript
Justinc.21 分钟前
CSS3新增边框属性(五)
前端·css·css3
fruge29 分钟前
纯css制作声波扩散动画、js+css3波纹催眠动画特效、【css3动画】圆波扩散效果、雷达光波效果完整代码
javascript·css·css3
neter.asia37 分钟前
vue中如何关闭eslint检测?
前端·javascript·vue.js
~甲壳虫38 分钟前
说说webpack中常见的Plugin?解决了什么问题?
前端·webpack·node.js
嚣张农民44 分钟前
JavaScript中Promise分别有哪些函数?
前端·javascript·面试
光影少年1 小时前
vue2与vue3的全局通信插件,如何实现自定义的插件
前端·javascript·vue.js
As977_1 小时前
前端学习Day12 CSS盒子的定位(相对定位篇“附练习”)
前端·css·学习