Ajax 第二天

95 阅读1分钟

Ajax第二天

查询指定数据(get)

一、根据参数

语法:params:{属性名:属性值}

<script src="./lib/axios.js"></script>
    <script>
        // 小括号保大括号
        axios ({
            // 请求方式
            method:`get`,
            url:`http://www.itcbc.com:3006/api/getbooks`,
            // 请求参数 指定一个参数写一个
            // 多个参数 含义是 && 条件都要满足
            params:{
                id:5913, // 后端返回 ID为5913的那一条数据
                author:`王勇`
            }
        }).then((result)=>{
            let arr = result.data.data
            render(arr)
        })

        function render(arr) {
            let html = arr.map((value)=>`<tr>
                <td>${value.id}</td>
                <td>${value.bookname}</td>
                <td>${value.author}</td>
                <td>${value.publisher}</td>
            </tr>`).join(``)

            document.querySelector(`tbody`).innerHTML = html
        }
        /* 指定参数查询对应的数据
        必须要写在params对象中 以键值对的形式存在
        写什么样的键值对,规定要由后端来决定 不懂就问 */
</script>

总结

​ 1.请求参数指定一个 属性名:属性值

​ 2.请求参数多个时 注意含义是 &&

​ 3.必须写在params对象中

二、其他方式

语法:url:".....?属性名=属性值"

<script>
        axios ({
            method:`get`,
            // 查询指定数据 固定写法 属性名=属性值 ? 多个数据 用 &
            url:`http://www.itcbc.com:3006/api/getbooks?id=5913&author=王勇`,
        }).then((result)=>{
            let arr = result.data.data
            render(arr)
        })

        function render(arr) {
            let html = arr.map((value)=>`<tr>
                <td>${value.id}</td>
                <td>${value.bookname}</td>
                <td>${value.author}</td>
                <td>${value.publisher}</td>
            </tr>`).join(``)

            document.querySelector(`tbody`).innerHTML = html
        }
</script>

总结

​ 1.直接在地址后面 ?属性名=属性值

​ 2.多个参数用&隔开

指定数据查询案例

1650855100070

<script>
        getData()
        const inp = document.querySelector(`input`)
        inp.addEventListener(`keydown`, function (e) {

            if (e.key === `Enter`) {
                console.log(`出来`);
                // 去除 左右两侧空格
                const value = inp.value.trim()
                // true 把输入的值去除了空格 输入
                if (value) {
                    // 设定一个形参 就是要拼接的字符串(指定数据)
                    const queryStr = `?bookname=${value}`
                    // 传入形参
                    getData(queryStr)
                    // false 没有值 就没去除空格 
                } else {
                    // 没有值 不传形参 就是用默认值
                    getData()
                }
            }
        })

        // 复用 封装函数  细节点:默认值 如果没有给形参 就是默认值空字符串 
        function getData(query = ``) {
            axios({
                method: `get`,
                // 如果不写默认值没传参 会输入 undefined 
                // 变成http://www.itcbc.com:3006/api/getbooks+undefined,
                url: `http://www.itcbc.com:3006/api/getbooks` + query,
            }).then((result) => {
                let arr = result.data.data
                render(arr)
            })
        }

        function render(arr) {}
</script>

总结

​ 1.第一种方式写在params内

​ 2.第二种方式写在url后用?拼接,多个数据用&

​ 3.params是用属性名:属性值,url是用属性名 =属性值

​ 4.get方式必须用params对象

​ 5.url地址注意是get

新增数据(post)

​ 语法:data:{}

<script>
    const btn = document.querySelector(`button`)
    btn.addEventListener(`click`, function () {
      axios({
        method: `post`,
        url: `http://www.itcbc.com:3006/api/addbook`,
        data: {
          bookname: `博士理论`,
          author: `黄某`,
          publisher: `黄某出版社`
        }
      }).then((result) => {
          console.log(result);
        })
    })
</script>

总结

​ 1.新增数组 用post方法

​ 2.url地址 是 add地址

​ 3.post 要用 data新增

新增数据案例

<script>
        getData()
        const keyword = document.querySelector(`.keyword`)
        const booknameDom = document.querySelector('.bookname');
        const authorDom = document.querySelector('.author');
        const publisherDom = document.querySelector('.publisher');
        const btnaddDom = document.querySelector('.btnadd');

        keyword.addEventListener(`keydown`, function (e) {

            if (e.key === `Enter`) {
                console.log(`出来`);
                const value = keyword.value.trim()
                if (value) {
                    const queryStr = `?bookname=${value}`
                    getData(queryStr)
                } else {
                    getData()
                }
            }
        })

        btnaddDom.addEventListener(`click`, function () {
            const bookname = booknameDom.value;
            const author = authorDom.value;
            const publisher = publisherDom.value;

            const data = {
                bookname,
                author,
                publisher
            }
            axios({
                method: `post`,
                url: 'http://www.itcbc.com:3006/api/addbook',
                data,
            }).then((result) => {
                console.log(result);
                getData()
                booknameDom.value = '';
                authorDom.value = '';
                publisherDom.value = '';
            })
        })

        function getData(query = ``) {}

        function render(arr) {}
</script>

接口基础概念

​ 1.使用Ajxa请求数据,被请求的URL地址,就叫接口数据(接口或Web接口)

2.每个接口都必须有对应的请求方式

1650875800175

接口文档格式

1650875831322

1650875857237

总结

​ 1.在浏览器地址栏 输入接口地址 也属于GET请求 固定搭配

1650875984366

​ 2.POST DELETE 不能用浏览器调用方法(不可以在浏览器操作)

​ 3.get请求传参参数方式两种

1 url上拼接(可在浏览器操作)

2 params指定 

删除案例(关键代码)

1650876024316

<script>
        tbody.addEventListener(`click`, function (e) {
            if (e.target.nodeName === `A`) {
                if(!confirm(`您确定删除?😔`)){
                    return
                }
                const { id } = e.target.dataset
                axios({
                    method: `delete`,
                    url: `http://www.itcbc.com:3006/api/delbook`,
                    params: {
                        id
                    }
                }).then((result) => {
                    getData()
                })
            }
        })
</script>

总结

​ 1.confir是JS中自带确认框 点击确地返回true,取消返回false

​ 2.const{id}因为获取的格式是对象格式

network面板

本质:抓取到所有的网络请求

作用:查看当前Ajax请求的详细信息,进行错误的排查

1650877559493

form封装拼接函数

<script>
        console.log(getForm(`.f1`));
        function getForm(query = ``) {
            let inp = document.querySelectorAll(query + ` input[name]`)
            let obj = {}
            // for (let index = 0; index < inp.length; index++) {
            //     obj[inp[index].name] = inp[index].value
            // }
            inp.forEach((dom)=>{
                obj[dom.name]=dom.value
            })
            return obj
        }
</script>

总结

​ 1.属性选择器 input[name]选中带有name属性的所有标签

​ 2.伪数组可以forEach遍历数组

​ 3.添加对象属性 obj[属性名.属性值]=属性名.属性值