axios简介
axios是一个前端Ajax的一个工具库。
axios资源 https://github.com/axios/axios
axios的引入:<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
请求格式
get请求
axios.get('url地址',{
属性名:属性值
})
eg:
axios.get('http://127.0.0.1:8000/axios-server',{
// 参数:
params:{
id:100,
vip:7
},
// 请求头
headers:{
name:'yang',
age:20
}
}).then(value =>{
// 响应体结果
console.log(value)
})
post请求
和get请求格式一样,但是他有请求体,放在post的第二个参数。
axios.post('url地址',{
post请求体
},{
属性名:属性值
})
eg:
btns[1].onclick =function(){
// post请求
axios.post('/axios-server',
{// 请求体
username:'admin',
password:'admin'
},{
// 参数:
params:{
id:200,
vip:9
},
// 请求头
headers:{
heigth:200,
width:200
}
})
}
ajax请求(通用请求,既可post也可get)
格式:
Post请求
axios({
// 请求方法:
method:'POST',
// 请求地址
url:'/axios-server',
// 参数
params:{},
// 请求头
headers:{},
// 请求体
data:{}
}).then()
Get请求
axios({
// 请求方法:
method:'GET',
// 请求地址
url:'/axios-server',
// 参数
params:{},
// 请求头
headers:{},
}).then()
eg:通用方法发送Post请求:
btns[2].onclick = function (){
axios({
// 请求方法:
method:'POST',
// url
url:'/axios-server',
// 参数
params:{
vip:10,
level:30
},
// 请求头
headers:{
heigth:200,
width:200
},
// 请求体
data:{
username:'admin',
password:'admin'
}
}).then(response=>{
// console.log(response)
//响应状态码
console.log(response.status);
//响应状态字符串
console.log(response.statusText);
//响应头信息
console.log(response.headers);
//响应体
console.log(response.data);
})
}
所有代码
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>
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
</head>
<body>
<div class="container">
<button class="btn btn-primary">GET</button>
<button class="btn btn-danger">POST</button>
<button class="btn btn-info">通用型方法ajax</button>
</div>
<script>
const btns =document.querySelectorAll('button')
axios.defaults.baseURL = 'http://127.0.0.1:8000'
btns[0].onclick =function(){
// get请求
axios.get('/axios-server',{
// 参数:
params:{
id:100,
vip:7
},
// 请求头
headers:{
name:'yang',
// age:20
}
}).then(value =>{
// 响应体结果
console.log(value)
})
}
btns[1].onclick =function(){
// post请求
axios.post('/axios-server',
{// 请求体
username:'admin',
password:'admin'
},{
// 参数:
params:{
id:200,
vip:9
},
// 请求头
headers:{
heigth:200,
width:200
}
})
}
//通用方法:POST请求
btns[2].onclick = function (){
axios({
// 请求方法:
method:'POST',
// url
url:'/axios-server',
// 参数
params:{
vip:10,
level:30
},
// 请求头
headers:{
heigth:200,
width:200
},
// 请求体
data:{
username:'admin',
password:'admin'
}
}).then(response=>{
// console.log(response)
//响应状态码
console.log(response.status);
//响应状态字符串
console.log(response.statusText);
//响应头信息
console.log(response.headers);
//响应体
console.log(response.data);
})
}
</script>
</body>
</html>
server.js:
// 1.引入express
const express = require('express');
// 2.创建应用对象
const app = express();
// 3.创建路由规则
// 如果请求行的路径是/server的GET请求就会执行回调函数里面的内容
app.get('/server', (request, response) => {
// 设置响应头 设置允许跨越
response.setHeader('Access-Control-Allow-Origin', '*');
// 设置响应体
response.send('HELLO AJAX GET')
})
// 如果请求行的路径是/server的POST请求就会执行回调函数里面的内容
app.all('/server', (request, response) => {
// 设置响应头 设置允许跨越
response.setHeader('Access-Control-Allow-Origin','*');
// 响应头(接受所有响应头信息)
response.setHeader('Access-Control-Allow-Headers','*')
// 设置响应体
response.send('HELLO AJAX POST')
})
app.all('/json-server', (request, response) => {
// 设置响应头 设置允许跨越
response.setHeader('Access-Control-Allow-Origin','*');
// 响应头(接受所有响应头信息)
response.setHeader('Access-Control-Allow-Headers', '*');
// 响应数据
const data = {
name: 'yang',
// age:18
}
// 数据类型转化
let str = JSON.stringify(data);
// 设置响应体
response.send(str)
})
// IE缓存
app.get('/IE', (request, response) => {
// 设置响应头 设置允许跨越
response.setHeader('Access-Control-Allow-Origin','*');
// 响应头(接受所有响应头信息)
response.setHeader('Access-Control-Allow-Headers', '*');
// 设置响应体
response.send('HELLO IE -- 3')
})
// 延时
app.all('/delay', (request, response) => {
// 设置响应头 设置允许跨越
response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Allow-Headers', '*');
setTimeout(()=>{
response.send('延时响应')
},3000)
})
// jQuery服务
app.all('/jquery-server', (request, response) => {
// 设置响应头 设置允许跨越
response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Allow-Headers','*')
const data = {name:'yang'}
response.send(JSON.stringify(data));
})
// Anxios服务
app.all('/axios-server', (request, response) => {
// 设置响应头 设置允许跨越
response.setHeader('Access-Control-Allow-Origin','*');
// 响应头(接受所有响应头信息)
response.setHeader('Access-Control-Allow-Headers', '*');
const data = {name:'yang'}
response.send(JSON.stringify(data));
})
// 4.监听端口启动服务
app.listen(8000, () => {
console.log('服务已经启动,8000端口监听中……')
})
获取请求错误信息
请求很可能出错,那么返回的就是错误信息我们可以使用 error
参数进行接收。
eg:get请求
axios.get('http://localhost:5000/students').then(
response => {
console.log("响应体内容", response.data)
},
error => {
console.log("请求失败", error.message)
}
)
开发中常用的请求格式
//下载axios库
import axios from "axios";
//post请求
axios({
method: "post",
url: "请求地址",
data: {请求参数,一般是对象模式},
});
//post请求
axios({
method: "get",
url: "请求地址",
params:{可以携带一些数据}
});
params参数和data请求体
axios中的params参数和data参数可以同时使用,它们的作用是不同的。
- params参数用于传递URL的查询参数,在GET请求中常用。它会将参数拼接在URL的后面,例如:/api/user?id=123。可以通过传递一个对象给params参数来指定查询参数,例如:
axios.get('/api/user', { params: { id: 123 } })。
- data参数用于传递请求体中的数据,在POST、PUT等请求中常用。它会将数据放在请求体中发送给服务器。可以通过传递一个对象给data参数来指定要发送的数据内容,例如:
axios.post('/api/user', { name: 'John' })。
这两个参数在使用时可以单独使用,也可以同时使用。params参数用于传递URL中的查询参数,data参数用于传递请求体中的数据。
虽然在GET请求中也可以使用data参数传递请求体中的数据,但是通常不推荐这样做。根据HTTP规范,GET请求中的数据应该放在URL的查询参数中,而不是请求体中。在POST请求中,也可以使用params参数来传递请求参数,但是这种方式不太常见,也不是推荐的做法。根据HTTP规范,POST请求中的数据应该放在请求体中,而不是拼接在URL的后面。大部分服务器也会将POST请求体中的数据作为请求参数进行处理,而不会解析URL中的查询参数。