---
tags: axios
---
# axios
## ajax缺點
異步請求
接收數據採用回調函數
1.jQuery庫龐大,佔用內存多
2.多個異步請求會產生回調地獄問題
## axios特點
1-1.可運行在node.js
1-2.可運行在瀏覽器端
2.基於promise網路請求庫,能解決回調地獄
3.axios可以用在vue和react
4.佔用內存小
## json-server
官網
https://www.npmjs.com/package/json-server
`npm install -g json-server`
`json-server -v`
`json-server`
自己寫數據
```json=
{
"student":[
{"id":"1001","name":"小明","age":20},
{"id":"1002","name":"小華","age":18},
{"id":"1003","name":"小美","age":18},
{"id":"1004","name":"小靜","age":40}
]
}
```
若會報錯的話需要額外使用開啟權限
`json-server --watch data.json`
改變端口號寫法
`json-server --watch data.json --port 80`
### Restful API
get:表示檢索
檢索全部`http://localhost:3000/student`
通過ID檢索`http://localhost:3000/student/1001`
通過條件檢索(可能有多項結果)`http://localhost:3000/student?age=18`



put:字段重組,id順序錯亂,age(沒寫到的屬性)通通消失

### 開啟權限
在終端機執行
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
### 關聯數據
```json=
{
"student": [
{
"id": "1001",
"name": "小明改",
"age": 20,
"classId":"1"
},
{
"name": "小華改",
"id": "1002",
"classId":"1"
},
{
"id": "1003",
"name": "小美",
"age": 18,
"classId":"1"
},
{
"id": "1004",
"name": "小靜",
"age": 40,
"classId":"2"
}
],
"classes":[
{
"id":"1",
"title":"web班",
"studentId":["1001","1002","1003"]
},
{
"id":"2",
"title":"java班",
"studentId":["1004"]
}
]
}
```


## 開始使用
官網
http://axios-js.com/zh-cn/
開源cdn
https://www.bootcdn.cn/
`<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>`
## get

```javascript=
<!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>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<button id="getNode">發送get請求</button>
<button id="postNode">發送post請求</button>
<button id="deleteNode">發送delete請求</button>
<button id="putNode">發送put請求</button>
<button id="patchNode">發送patch請求</button>
<script>
console.log(axios);
console.dir(axios);
getNode.onclick = function () {
axios
.get("http://localhost/student")
.then((result) => {
console.log(result);
const { data } = result; // 獲取服務器端的響應數據
console.log(data);
})
.catch((err) => {
console.log(err);
});
};
</script>
</body>
</html>
```
```javascript=
axios
.get("http://localhost/student/1001")
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
```
```javascript=
axios
.get("http://localhost/student?age=18")
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
```
```javascript=
axios
.get("http://localhost/student", {
params: {
age: 18
}
})
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
```
## post
```javascript=
postNode.onclick = function () {
axios
.post("http://localhost/student", {
id: "1005",
name: "小紅"
})
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
};
```
## delete
```javascript=
deleteNode.onclick = function () {
axios
.delete("http://localhost/student/1005")
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
};
```
## put
```javascript=
putNode.onclick = function () {
axios
.put("http://localhost/student/1002", {
name: "小華",
})
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
};
```
## patch
```javascript=
patchNode.onclick = function () {
axios
.patch("http://localhost/student/1001", {
name: "小明明",
})
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
};
```
# 阿賈克斯
```javascript=
<!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>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<button id="sendRequestNode">發送請求</button>
<script>
sendRequestNode.onclick = function () {
axios({
// 配置請求的url
url: "/student",
params: {
age: 18,
},
// 配置請求類型 默認get
method: "get",
// 基礎路徑 請求路徑 = 基礎路徑[協議,IP,端口] + 項目路徑
baseURL: "http://localhost",
})
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
};
</script>
</body>
</html>
```
```javascript=
sendRequestPostNode.onclick = function () {
axios({
url: "/student",
method: "post",
baseURL: "http://localhost",
data:{
id:"1005",
name:"小強",
age:19,
classId:1
}
})
.then((result) => {
console.log(result);
console.log("添加成功");
})
.catch((err) => {
console.log(err);
});
};
```
## 請求過濾
```javascript=
sendRequestFilterNode.onclick = function () {
axios({
url: "/student",
method: "post",
baseURL: "http://localhost",
data: {
id: "1005",
name: "小強",
age: 19,
classId: 1,
},
// 大小寫要注意
transformRequest: [
function (data, headers) {
data.name = "小明";
let params = "";
for (const [key, value] of Object.entries(data)) {
params += `${key}=${value}&`;
}
if (params) {
params = params.substring(0, params.length - 1);
}
return params;
},
],
})
.then((result) => {
console.log(result);
console.log("添加成功");
})
.catch((err) => {
console.log(err);
});
};
```
## 響應過濾
```javascript=
sendResponseFilterNode.onclick = function () {
axios({
url: "/student",
params: {
age: 18,
},
method: "get",
baseURL: "http://localhost",
transformResponse:[function(data){
// data響應回來是字符串
console.log("####",data);
const dataObj =JSON.parse(data)
dataObj[0].name='小綠'
return dataObj
}]
})
.then((result) => {
console.log("xxxx",result.data);
})
.catch((err) => {
console.log(err);
});
};
```
## 請求頭
範例網站
https://m.maizuo.com/v5/?co=mzmovie#/films/comingSoon

請求頭不可多不可少


### 請求頭懶人解法
安裝chrome插件
https://seanacnet.com/website-related/cors-error-chrome-easy-cors/
# 全局配置
`axios.defaults.baseURL = "http://localhost"`
```javascript=
<!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>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<button id="addNode">新增</button>
<button id="findNode">檢索</button>
<script>
// 全局配置
axios.defaults.baseURL = "http://localhost";
addNode.onclick = function () {
axios({
url: "/student",
method: "post",
data: {
id: "1005",
name: "小強",
age: 19,
classId: 1,
},
})
.then((result) => {
console.log(result);
console.log("添加成功");
})
.catch((err) => {
console.log(err);
});
};
findNode.onclick = function () {
axios({
url: "/student",
params: {
age: 18,
},
method: "get",
})
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
};
</script>
</body>
</html>
```
# 攔截器

```javascript=
<!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>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<button id="requestNode">請求攔截器</button>
<button id="responseNode">響應攔截器</button>
<script>
axios.interceptors.request.use(
function (config) {
console.log(config);
// config.data直接是一個對象
config.data.name && (config.data.name = "小明");
return config;
},
function (error) {
return Promise.reject(error);
}
);
requestNode.onclick = function () {
axios({
url: "/student",
method: "post",
baseURL: "http://localhost",
data: {
id: "1005",
name: "小強",
age: 19,
classId: 1,
},
})
.then((result) => {
console.log(result);
console.log("添加成功");
})
.catch((err) => {
console.log(err);
});
};
responseNode.onclick = function () {
axios({
url: "/student",
params: {
age: 18,
},
method: "get",
baseURL: "http://localhost",
})
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
};
</script>
</body>
</html>
```
```javascript=
<!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>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<button id="requestNode">請求攔截器</button>
<button id="responseNode">響應攔截器</button>
<script>
axios.interceptors.response.use(
function (response) {
// 对响应数据做点什么
console.log(response);
response.data[0].name = "小綠";
return response;
},
function (error) {
// 对响应错误做点什么
return Promise.reject(error);
}
);
requestNode.onclick = function () {
axios({
url: "/student",
method: "post",
baseURL: "http://localhost",
data: {
id: "1005",
name: "小強",
age: 19,
classId: 1,
},
})
.then((result) => {
console.log(result);
console.log("添加成功");
})
.catch((err) => {
console.log(err);
});
};
responseNode.onclick = function () {
axios({
url: "/student",
params: {
age: 18,
},
method: "get",
baseURL: "http://localhost",
})
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});
};
</script>
</body>
</html>
```