1.①AJAX简介(XMLHttpRequest)②解析json数据③解构赋值④请求异常与超时的处理⑤避免用户多次重复发送请求(前几次取消,只留最后一次)

目录

一:AJAX简介

二:优点

1.页面无刷新获取数据:比如鼠标移动到充话费自动出div框

2.允许根据用户的事件更新部分页面内容(同上图)

三:缺点

四:   AJAX核心对象是   XMLHttpRequest

五:搭建测试ajax请求服务器

1.首先在终端输入两条语句:yarnpkg init 👉 yarnpkg add express

2.创建一个server.js和一个1.体验.html

3.终端执行

4.ctrl+鼠标左键点击链接

5.出现

 6.点击按钮

7.注意:xhr内部有5种状态,我们只需了解即可

8.http网页状态码

六:   AJAX解析json数据

七:延伸解构赋值

1.标准的解构赋值

2.react里面的连续解构赋值

延伸给c重命名为aaa

八:请求异常与超时的处理

1.系统主动设置:

2.给用户一个按钮,让用户主动取消请求

九:避免用户多次重复发送请求(前几次取消,只留最后一次)

十:XMLHttpRequest实例化对象的API


一:AJAX简介

二:优点

1.页面无刷新获取数据:比如鼠标移动到充话费自动出div框

 又比如:刷今日头条新闻,每向下一点都会刷出一条新新闻

2.不需要刷新页面就能实现的异步局部更新

三:缺点

1.没有浏览历史,不能回退(因为是无刷新获取数据)

正常有: ,AJAX没有

2.存在跨域问题

3.SEO(搜索引擎优化)不友好(爬虫爬不到)

四:   AJAX核心对象是   XMLHttpRequest

五:搭建测试ajax请求服务器

1.首先在终端输入两条语句:yarnpkg init 👉 yarnpkg add express

2.创建一个server.js和一个1.体验.html

// 1.引入express
const express = require('express')
// 2.创建一个app实例对象
const app = express()
// 3.绑定监听
app.listen(8866, (err) => {
    // 函数体
    if (!err) {
        console.log('测试ajax请求的服务器开启成功!测试地址如下')
        console.log('http://127.0.0.1:8866/1.体验.html')
    }
})
// 4.配一个路由
app.get('/test_get', (request, response) => {
    // 如果点击按钮终端输出:
    console.log('有人发送请求了')
    response.send('hello_test_get!!')
})
// 5.暴露静态资源
app.use(express.static(__dirname + '/web'))

    <style>
        #cont {
            width: 500px;
            height: 500px;
            border: 1px solid black;
            margin-top: 20px;
        }
    </style>
<body>
    <!-- 点击按钮 无刷新无抖动跳转 -->
    <!-- 1.测试ajax基本使用 -->
    <button id='btn'>点我发送(用原生js发送ajax里的get请求)</button>
    <div id="cont"></div>
    <script>
        let btn = document.getElementById('btn')
        let cont = document.getElementById('cont')

        btn.onclick = () => {
            // 发送ajax请求
            // 一:创建 xhr 实例对象
            const xhr = new XMLHttpRequest()
            console.log(xhr.readyState)        //0
            // 二:指定发送请求的method和url
            xhr.open('GET', 'http://127.0.0.1:8866/test_get')
            // 三:发送请求
            xhr.send()
            // 四:绑定监听:当状态改变时
            // xhr内部有5种状态,值分别为0、1、2、3、4
            // 0:实例出来的那一刻            4:数据接收完毕
            // xhr内部有5种状态,值分别为0、1、2、3、4
            /*        0:初始状态:实例出来的那一刻  
                      1:open已经调用了,但是send还没有调用,此时可以修改请求头内容
                      2:send已经调用了,已经无法修改请求头
                      3:已经回来一部分数据了,小的数据会在此阶段一次性接收完毕,较大的数据有待进一步接收
                      4:数据接收完毕
            */
            xhr.onreadystatechange = () => {
                // console.log(xhr.readyState)   //五个状态,连续输出4次
                if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status <= 300)) {  //状态码
                    console.log(xhr.response)  //hello_test_get!!
                    cont.innerHTML = `<h3>${xhr.response}</h3>`
                }
            }

        }
    </script>
</body>

3.终端执行

4.ctrl+鼠标左键点击链接

5.出现

 6.点击按钮

并且终端

7.注意:xhr内部有5种状态,我们只需了解即可

①open已经调用了,但是send还没有调用,此时可以修改请求头内容

②send已经调用了,已经无法修改请求头

③已经回来一 部分数据了,小的数据会在此阶段一次性接收完毕,较大的数据有待进一步接收                     

④数据接收完毕

8.http网页状态码

200:成功

3  :缓存

4   :404没有  401权限不够

5   :服务器出错

六:   AJAX解析json数据

server.js

// 1.引入express
const express = require('express')
// 2.创建一个app实例对象
const app = express()
// 3.绑定监听
app.listen(8866, (err) => {
    // 函数体
    if (!err) {
        console.log('测试ajax请求的服务器开启成功!测试地址如下')
        console.log('http://127.0.0.1:8866/1.体验.html')
        // 给3.ajax解析json数据.html 用
        console.log('http://127.0.0.1:8866/3.ajax解析json数据.html')
    }
})
// 4.配一个路由,响应GET请求
// ①演示1.体验.html
app.get('/test_get', (request, response) => {
    // 如果点击按钮终端输出:
    console.log('有人发送请求了')
    response.send('hello_test_get!!')
})
// ②演示ajax解析json字符串
app.get('/get_person', (request, response) => {
    console.log('有人请求get_person了')
    const person = { name: '熊大', age: 18, sex: '男' }
    response.send(JSON.stringify(person))
})

// 5.暴露静态资源
app.use(express.static(__dirname + '/web'))

<style>
        #cont {
            width: 500px;
            height: 500px;
            border: 1px solid black;
            margin-top: 20px;
        }
</style>
<body>
    <!-- 点击按钮 无刷新无抖动跳转 -->
    <!-- 1.测试ajax基本使用 -->
    <button id='btn'>点我发送(用原生js发送ajax里的get请求)</button>
    <div id="cont"></div>
    <script>
        let btn = document.getElementById('btn')
        let cont = document.getElementById('cont')

        btn.onclick = () => {
            // 发送ajax请求
            // 一:创建 xhr 实例对象
            const xhr = new XMLHttpRequest()
            console.log(xhr.readyState)        //0
            // 二:指定发送请求的method和url
            xhr.open('GET', 'http://127.0.0.1:8866/get_person')
            // 三:发送请求
            xhr.send()

            // 四:绑定监听:当状态改变时
            // xhr内部有5种状态,值分别为0、1、2、3、4
            // 0:实例出来的那一刻            4:数据接收完毕
            // xhr内部有5种状态,值分别为0、1、2、3、4
            /*        0:初始状态:实例出来的那一刻  
                      1:open已经调用了,但是send还没有调用,此时可以修改请求头内容
                      2:send已经调用了,已经无法修改请求头
                      3:已经回来一部分数据了,小的数据会在此阶段一次性接收完毕,较大的数据有待进一步接收
                      4:数据接收完毕
            */
            // responseType 指定返回数据的格式:自动解析JSON字符串,在open后面写,和下面的③一起使用
            xhr.responseType = 'json'
            xhr.onreadystatechange = () => {
                // console.log(xhr.readyState)   //五个状态,连续输出4次
                if (xhr.readyState === 4 && (xhr.status >= 200 && xhr.status <= 300)) {  //状态码
                    // // ①手动解析JSON字符串,
                    // const Obj = JSON.parse(xhr.response)
                    // console.log(Obj)  //hello_test_get!!
                    // cont.innerHTML = `<h3>${xhr.response}</h3>`

                    // ②对象的解构:
                    // const { name, age, sex } = JSON.parse(xhr.response)
                    // cont.innerHTML = (`
                    //     <ul>
                    //         <li>姓名:${name}</li>
                    //         <li>年龄:${age}</li>
                    //         <li>性别:${sex}</li>
                    //     </ul>`)

                    // // ③自动解析json在open后
                    console.log(xhr.response)//直接就是对象形式的了
                }
            }
        }
    </script>
</body>

七:延伸解构赋值

上面第六条html代码里有对象的解构赋值,下面介绍标准的解构赋值和react里面的连续解构赋值

1.标准的解构赋值

        let obj = { a: 1, b: { c: 5 } }
        let { c } = obj.b
        console.log(c)  //5 

2.react里面的连续解构赋值

        let obj = { a: 1, b: { c: 5 } }
        let { b: { c } } = obj
        console.log(c)       //5

延伸给c重命名为aaa

        let obj = { a: 1, b: { c: 5 } }
        let { b: { c: aaa } } = obj
        console.log(aaa)     //5

八:请求异常与超时的处理

1.系统主动设置:

2.给用户一个按钮,让用户主动取消请求

 

九:避免用户多次重复发送请求(前几次取消,只留最后一次)

十:XMLHttpRequest实例化对象的API

 const xhr = new XMLHttpRequest()  //创建 xhr 实例对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值