目录
[◆ AJAX 概念和 axios 使用](#◆ AJAX 概念和 axios 使用)
[什么是 AJAX?](#什么是 AJAX?)
[怎么发送 AJAX 请求?](#怎么发送 AJAX 请求?)
[axios 函数的基本结构](#axios 函数的基本结构)
[axios 函数的使用场景](#axios 函数的使用场景)
[1 没有参数的情况](#1 没有参数的情况)
[2 使用params参数传参的情况](#2 使用params参数传参的情况)
[3 使用data参数来处理请求体的数据](#3 使用data参数来处理请求体的数据)
[4 上传图片等二进制的情况](#4 上传图片等二进制的情况)
[form-serialize 插件](#form-serialize 插件)
◆ AJAX 概念和 axios 使用
什么是 AJAX?
概念:AJAX 是浏览器与服务器进行数据通信的技术
怎么发送 AJAX 请求?
- 使用 axios [æk'sioʊs] 库
- 基于 XMLHttpRequest 封装、代码简单
- Vue、React 项目中都会用到 axios
- 使用 XMLHttpRequest 对象
如何使用axios
语法:
1. 引入 axios.js
- 在线引入: https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js --axios在线库
- 本地引入:下载好axios文件,使用相对路径引入
2. 使用 axios 函数
axios 函数的基本结构
- url
这个参数是必须的,里面填的是请求的url地址
- method
这个参数是可选的,默认请求的是GET方法,参数内容不区分大小写
- params
这个参数主要是替代以前的字符串拼接的方法,填在params里面的参数会以字符串拼接的方式,将参数凭借到url地址上。但这里会对参数值进行url编码
- data
这个参数主要是用于接收请求体或者二进制参数,所以如果参数是表单数据或者二进制数据,需要使用data这个对象来接收
- axios的回调处理--then()函数
这个函数主要是处理axios请求成功后返回的数据数据,里面接收一个回调函数
axios的回调处理--catch()函数
这个函数主要是处理axios请求失败后返回的数据数据,里面接收一个回调函数
axios 函数的使用场景
前提条件:成功的引入了js的依赖后
1 没有参数的情况
javascript
//场景1:无参数的请求
//不填请求方法参数,默认是GET请求
axios({
url: 'http://hmajax.itheima.net/api/province'
}).then(function(result){
//请求成功调用
console.log(result);
}).catch(function(error){
//请求异常调用
console.log(error);
})
2 使用params参数传参的情况
javascript
//场景2:使用params参数的请求
axios({
url: 'http://hmajax.itheima.net/api/city',
params: {
pname: '辽宁省'
}
}).then(function(result){
//请求成功调用
console.log(result);
}).catch(function(error){
//请求异常调用
console.log(error);
})
使用箭头函数来替代匿名函数
3 使用data参数来处理请求体的数据
当请求方法是post方法时,参数会以请求体的方式向服务器提交
javascript
// 场景3 使用data参数来处理请求体的数据
axios({
url: 'http://hmajax.itheima.net/api/register',
method: 'post',
data: {
username: 'jack12345',
password: '123456'
}
}).then(result=>{
//请求成功调用
console.log(result);
}).catch(error=>{
//请求异常调用
console.log(error);
})
4 上传图片等二进制的情况
-
- 获取图片文件对象
-
- 使用 FormData 携带图片文件
-
- 提交表单数据到服务器,使用图片 url 网址
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 文件选择元素 -->
<input type="file" class="upload">
<img src="" alt="">
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
//场景1:无参数的请求
// axios({
// url: 'http://hmajax.itheima.net/api/province'
// }).then(function(result){
// //请求成功调用
// console.log(result);
// }).catch(function(error){
// //请求异常调用
// console.log(error);
// })
//场景2:使用params参数的请求
// axios({
// url: 'http://hmajax.itheima.net/api/city',
// params: {
// pname: '辽宁省'
// }
// }).then(function(result){
// //请求成功调用
// console.log(result);
// }).catch(function(error){
// //请求异常调用
// console.log(error);
// })
// // 场景3 使用data参数来处理请求体的数据
// axios({
// url: 'http://hmajax.itheima.net/api/register',
// method: 'post',
// data: {
// username: 'jack12345',
// password: '123456'
// }
// }).then(result=>{
// //请求成功调用
// console.log(result);
// }).catch(error=>{
// //请求异常调用
// console.log(error);
// })
//4 上传图片等二进制的情况
//1. 获取图片文件
document.querySelector('.upload').addEventListener('change',(e)=>{
// console.log(e.target.files);
//2. 使用 FormData 携带图片文件
const fd = new FormData()
// append() 追加元素
fd.append('img',e.target.files[0])
//使用ajax提交数据
axios({
url: 'http://hmajax.itheima.net/api/uploadimg',
method: 'post',
data: fd
}).then(result=>{
console.log(result);
// console.log(result.data.data.url);
document.querySelector('img').src = result.data.data.url
}).catch(error=>{
console.log(error);
})
})
</script>
</body>
</html>
在日常的开发中基本大概是这四种常见的情况,学会用这几种,基本上可以解决问题
form-serialize 插件
作用:快速收集表单元素的值
使用:
- 1 获取表单对象
- 2 使用serialize函数,快速收集表单元素的值
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>13.form-serialize插件使用</title>
<script src="./lib/form-serialize.js"></script>
</head>
<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插件,快速收集表单元素值
-->
<script>
//为提交按钮设置监听事件
document.querySelector('.btn').addEventListener('click', () => {
//使用插件快速获取表单元素值
/**
* 2. 使用serialize函数,快速收集表单元素的值
* 参数1:要获取哪个表单的数据
* 表单元素设置name属性,值会作为对象的属性名
* 建议name属性的值,最好和接口文档参数名一致
* 参数2:配置对象
* hash 设置获取数据结构
* - true:JS对象(推荐)一般请求体里提交给服务器
* - false: 查询字符串
* empty 设置是否获取空值
* - true: 获取空值(推荐)数据结构和标签结构一致
* - false:不获取空值
*/
const form = document.querySelector('.example-form')
const data = serialize(form,{hash:true,empty:true})
console.log(data);
})
</script>
</body>
</html>