目录
1.首先在终端输入两条语句:yarnpkg init 👉 yarnpkg add express
一: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 实例对象