【AJAX】让数据活起来&axios使用
目录一、什么是AJAX?
1. 怎么用 AJAX ?
2. axios 使用
3. 熟悉 URL
4. URL 查询参数
5. 常用哀求方法
6. axios 错误处理
7. HTTP 协议-哀求报文
8. 接口文档
9. form-serialize 插件
总结不易~本章节对我有很大收获,希望对你也是~~~~
一、什么是AJAX?
界说:
AJAX(Asynchronous JavaScript and XML) 是一种用于在 网页与服务器之间举行异步数据通信 的技能。它允许网页在不刷新整个页面的情况下从服务器获取或发送数据,从而提高用户体验。
尽管名字中有 "XML",但实际上 AJAX 并不局限于 XML,今世开辟中更常用 JSON(JavaScript Object Notation) 作为数据格式。
概念:AJAX 是欣赏器与服务器举行 数据通信 的技能
1. 怎么用 AJAX ?
1.1. 先使用 axios [æk‘sioʊs] 库,与服务器举行数据通信 基于 XMLHttpRequest 封装、代码简单、月下载量在 14 亿次 Vue、React 项目中都会用到 axios 1.2. 再学习 XMLHttpRequest 对象的使用,了解 AJAX 底层原理
2. axios 使用
1. 引入 axios.js:https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js2. 使用axios函数
1)传入设置对象
2)再用 .then 回调函数接收结果,并做后续处理
axios({
url: '目标资源地址'
}).then((result) => {
// 对服务器返回的数据做后续处理
})
eg1:资料自取
需求:哀求目标资源地址,拿到省份列表数据,显示到页面url: http://hmajax.itheima.net/api/province
https://i-blog.csdnimg.cn/direct/693894bf1aa34c96a46f60fe6b8ab581.png
result就是可以直接返回服务器获取的布局,然后对获取的省份用join('<br>')来举行分割
3. 熟悉 URL
URL(Uniform Resource Locator,统一资源定位符) 是 互联网上资源的地址,用于定位网页、图片、视频等各种资源。简单来说,它就是你在欣赏器地址栏输入的网址。
https://api.example.com/users?name=Tom&age=18
组成部分作用https://协议(HTTP / HTTPS)api.example.com域名(服务器地址)/users资源路径?name=Tom&age=18查询参数
https://i-blog.csdnimg.cn/direct/a16e82ff48144f03b6780dbf66b7b10c.png
协议 http 协议:超文本传输协议,规定欣赏器和服务器之间传输数据的格式https://i-blog.csdnimg.cn/direct/0a164246fcbd4945b2e6656d8a3c9e45.png
https://i-blog.csdnimg.cn/direct/90a91c1355884742bf699a8e5225a40e.png
域名 域名:标志服务器在互联网中方位https://i-blog.csdnimg.cn/direct/66a1c27c8a414d81a71ed71f1564887f.png
资源路径 资源路径:标志资源在服务器下的详细位置https://i-blog.csdnimg.cn/direct/d310036baae24b0c993bcdfd8eb302cf.png
获取 - 消息列表 需求:使用 axios 从服务器拿到消息列表数据 目标资源地址:http://hmajax.itheima.net/api/news<div></div>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
axios({
url: 'http://hmajax.itheima.net/api/news'
}).then((result) => {
console.log(result)
console.log(result.data)
console.log(result.data.data)
let value = result.data.data
console.log(value)
let arr = []
for (let i = 0; i < 5; i++) {
console.log(value.title)
arr.push(value.title)
}
console.log(arr)
document.querySelector('div').innerHTML = arr.join('<br>')
})
</script> https://i-blog.csdnimg.cn/direct/229ec2ee8430415589f6ea274349e3b0.png
4. URL 查询参数
界说:欣赏器提供给服务器的额外信息,让服务器返回欣赏器想要的数据
语法:http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2
https://i-blog.csdnimg.cn/direct/dbc36487f52c4f70a063f360c55ed043.png
axios-查询参数-- params选项
axios 在运行时把参数名和值,会拼接到 url?参数名=值 eg: 城市列表:http://hmajax.itheima.net/api/city?pname=河北省axios({
url: 'http://hmajax.itheima.net/api/city',
params: {
pname: '河北省'
}
}).then(result => {
// 对服务器返回的数据做后续处理
})
地域查询 需求:根据输入的省份名字和城市名字,查询地域并渲染列表https://i-blog.csdnimg.cn/direct/a6e54c705bde42a982920118eed81402.png
在 axios 里,params 选项用于拼接 URL 查询参数,它是一个对象(Object),其完备写法如下:
params: {
pname: pname, // 传递字符串
cname: cname
}
[*]params 里的键值对是 键(Key)和值(Value) 的映射关系(类似 hash 映射)。
[*]键:pname 和 cname 是哀求的参数名称,它们会主动添加到 URL 的查询参数中。
[*]值:pname 和 cname 变量存储的是 input 输入框的值,它们将被看成字符串传递到服务器。
因为 对象的键和值雷同时,可以省略值的重复写法。
params: { pname, cname }
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
/*
获取地区列表: http://hmajax.itheima.net/api/area
查询参数:
pname: 省份或直辖市名字
cname: 城市名字
*/
let btn = document.querySelector('.btn')
btn.addEventListener('click', function () {
let pname = document.querySelector('.province').value
let cname = document.querySelector('.city').value
console.log(pname)
axios({
url: 'http://hmajax.itheima.net/api/area',
params: {
pname, // 传递字符串
cname
}
}).then(result => {
console.log(result)
let list = result.data.list
console.log(list)
let theLi = list.map(areaName => `<li class="list-group-item">${areaName}</li>`).join('')
console.log(theLi)
document.querySelector('.list-group').innerHTML = theLi
})
})
</script> https://i-blog.csdnimg.cn/direct/775f5c214c4d4857908f8d512d619203.png
5. 常用哀求方法
哀求方法:对服务器资源,要执行的操纵方法作用示例GET获取资源axios.get(url)POST提交数据axios.post(url, data)PUT更新资源axios.put(url, data)DELETE删除资源axios.delete(url)
1. 哀求方法表明对服务器资源的操纵, 最为常用 的2个是? POST 提交数据,GET 查询数据 ,通常get就是axios的默认设置 2. axios 的核心设置?
[*] url:哀求 URL 网址
[*] method :哀求方法, GET 可以省略(不区分大小写)
[*] params:查询参数
[*] data :提交数据
如图很好明白:
https://i-blog.csdnimg.cn/direct/eb8321283a5f43de9101e36fe4b381f6.png
6. axios 错误处理
在 then 方法的后面,通过点语法调用 catch 方法,传入 回调函数 并界说 形参 很好明白就是多了一个catch()方法 document.querySelector('.btn').addEventListener('click', () => {
axios({
url: 'http://hmajax.itheima.net/api/register',
// 指定请求方法
method: 'post',
data: {
username: 'itheima007',
password: '7654321'
}
}).then(result => {
console.log(result)
}).catch(error => {
console.log(error)
alert(error.response.data.message)
})
}) https://i-blog.csdnimg.cn/direct/80b7f02284d24168a6e1218a908550e8.png
7. HTTP 协议-哀求报文
HTTP 协议:规定了欣赏器发送及服务器返回内容的格式 哀求报文:欣赏器按照 HTTP 协议要求的格式,发送给服务器的内容
1)哀求报文的组成部分有:
[*] 哀求行:哀求方法,URL,协议
[*]哀求头:以键值对的格式携带的附加信息,比如:Content-Type
[*] 空行:分隔哀求头,空行之后的是发送给服务器的资源
[*]哀求体:发送的资源
https://i-blog.csdnimg.cn/direct/b3e4d08a25ad46ba9100f1413f7969e2.png
2)通过 Chrome 的网络面板查看哀求报文
https://i-blog.csdnimg.cn/direct/a51660b1a11347aaa8194182d9ea6b42.png
HTTP 协议-相应报文 HTTP 协议:规定了欣赏器发送及服务器返回内容的格式 相应报文:服务器按照 HTTP 协议要求的格式,返回给欣赏器的内容
[*]相应行(状态行):协议、HTTP 相应状态码、状态信息
[*]相应头:以键值对的格式携带的附加信息,比如:Content-Type
[*]空行:分隔相应头,空行之后的是服务器返回的资源
[*]相应体:返回的资源
https://i-blog.csdnimg.cn/direct/f8c82582f0fa49ee83e0f7a94ba88230.png
HTTP 相应状态码 HTTP 相应状态码:用来表明哀求是否成功完成 。比如:404(服务器找不到资源)状态码寄义200 OK哀求成功201 Created资源已创建204 No Content哀求成功但无返回301 Moved Permanently永世重定向302 Found暂时重定向304 Not Modified资源未修改,可使用缓存400 Bad Request哀求错误401 Unauthorized未授权(必要登录或 token)403 Forbidden禁止访问404 Not Found资源不存在500 Internal Server Error服务器内部错误502 Bad Gateway网关错误503 Service Unavailable服务器暂时不可用
8. 接口文档
传送门:AJAX接口文档 由后端提供的形貌接口的文章https://i-blog.csdnimg.cn/direct/a8bfb5f79f014911a2046e065fccd692.png
案例-用户登录
[*]点击登录时,判定用户名和密码长度
[*]提交数据和服务器通信
[*]提示信息https://i-blog.csdnimg.cn/direct/3eda5a2a7f1d4bc4b64aa4e5bf1a6b11.png
[*]第一步就是获取点击事故,再判定用户名和密码的长度
[*]通过就举行axois举行数据提交和错误接收
[*]末了创建一个函数alertFn() 通过传入参数msg 文字提示信息 和 是否登录成功的判定isSuccess来决定该显示框的颜色
这里保举一个超好用的网址:https://v5.bootcss.com/docs/getting-started/introduction/
可以举行多种方法的文档查询https://i-blog.csdnimg.cn/direct/d0acbf0e82794099bd01200b9484d95b.png
通过引入bootstrap后就可以直接使用该方法,只必要对该div举行添加该class命名即可:
<!-- 引入bootstrap.css -->
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> https://i-blog.csdnimg.cn/direct/d8db037b97b7444ab6bf991bc1c3a5c8.png
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
// 目标1:点击登录时,用户名和密码长度判断,并提交数据和服务器通信
// 目标2:使用提示框,反馈提示消息
const Alert = document.querySelector('.alert')
// 2.2 封装提示框函数 重复调用 满足提示需求
// 功能:
// 1. 显示提示框
// 2. 不同提示文字msg 和成功绿色失败红色isSuccess
// 3. 过2秒后,让提示框自动消失
function alertFn(msg, isSuccess) {
// 1. 显示提示框
Alert.classList.add('show')
// 2. 接收文字和显示颜色
const text = isSuccess ? 'alert-success' : 'alert-danger'
Alert.innerHTML = msg
Alert.classList.add(text)
// 3. 2秒后消失
setTimeout(() => {
Alert.classList.remove('show')
Alert.classList.remove(text)
}, 2000)
}
// 1.1 登录-点击事件
document.querySelector('.btn-login').addEventListener('click', () => {
// 1.2 获取用户名和密码
const username = document.querySelector('.username').value
const password = document.querySelector('.password').value
// console.log(username, password)
// 1.3 判断长度
if (username.length < 8) {
alertFn('用户名必须大于等于8位', false)
console.log('用户名必须大于等于8位')
return // 阻止代码继续执行
}
if (password.length < 6) {
alertFn('密码必须大于等于6位', false)
console.log('密码必须大于等于6位')
return // 阻止代码继续执行
}
// 1.4 基于axios提交用户名和密码
// console.log('提交数据到服务器')
axios({
url: 'http://hmajax.itheima.net/api/login',
method: 'POST',
data: {
username,
password
}
}).then(result => {
alertFn(result.data.message, true)
console.log(result)
console.log(result.data.message)
}).catch(error => {
alertFn(error.response.data.message, false)
console.log(error)
console.log(error.response.data.message)
})
})
</script>
9. form-serialize 插件
作用:快速获取表单数据并转换为对象。
用法:
const form = document.querySelector('.example-form')
const data = serialize(form, { hash: true, empty: true }) https://i-blog.csdnimg.cn/direct/b7197093435f4a2b9db57bd17aba642d.png
<body>
<form action="javascript:;" class="example-form">
<input type="text" name="uname">
<br>
<input type="text" name="pwd">
<br>
<input type="button" class="btn" value="提交">
</form>
<!--
目标:在点击提交时,使用form-serialize插件,快速收集表单元素值
-->
<!-- 1. 把插件引入到自己的网页代码中 -->
<script src="./lib/form-serialize.js"></script>
<script>
document.querySelector('.btn').addEventListener('click', () => {
//2. 使用serialize函数 快速收集表单元素的值
// 参数1 要获取哪个表单的数据
// 表单元素设置name属性 值会作为对象的属性名
// 参数2 配置对象
// hash 设置获取数据结构
// - true JS对象(推荐) 一般请求体里提交给服务器
// - false 查询字符串
// empty 设置是否获取空值
// - true 获取空值(推荐) 数据结构和标签结构一致
// - false 不获取空值
const form = document.querySelector('.example-form')
const data = serialize(form, { hash: true, empty: true })
// const data = serialize(form, { hash: false, empty: true })
// const data = serialize(form, { hash: true, empty: false })
console.log(data)
})
</script>
</body> 解包,快速获得多个表单数据:
// 设置表单 name属性的值
const form = document.querySelector('.login-form')
console.log(form)
const data = serialize(form, { hash: true, empty: true })
console.log(data)
// 1.2 获取用户名和密码
// const username = document.querySelector('.username').value
// const password = document.querySelector('.password').value
// console.log(username, password)
// 解包
// const { username, password } = data
const { username: username, password: password } = data
总结不易~本章节对我有很大收获,希望对你也是~~~~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]