axios的使用

1.axios的基本使用

1.axios调用的返回值是Promise实例
2.成功的值叫response,失败的值叫error
3.axios成功的值是一个axios封装的response对象,服务器返回的真正数据在response.data中
4.携带query参数时,编写的配置项叫做params
5.携带params0参数时,需要自己手动拼在url中

1.1GET请求

完整版

Sever({
        url: 'http://localhost:3000/api/get',//请求地址
        method: 'GET',//请求方式
      }).then(
        response => {
          console.log(response);
        }
      ).catch(
        error=> {
          console.log('出错了',error);
        }
      )

精简版

axios.get(" url: 'http://localhost:3000/api/get'")
	.then(
		response => {}
	).catch(
		error => {
		
		}
	)
1.2携带query请求的axios

完整版

Sever({
        url: 'http://localhost:3000/api/get',
        method: 'GET',
        params: {  //写的是params 但是携带的是query参数
          id: personId.value
        }
      }).then(
        response=>{
          console.log(response);
        },
        error=>{
          console.log(error);
        })

精简版

 axios.get('http://localhost:3000/api/get',{params: {id: personId.value}}).then(
        response=>{
          console.log(response);
        },
        error=>{
          console.log(error);
        })
    }
1.3post请求携带json参数和url encoded参数

完整版

	Sever({
        url: 'http://localhost:3000/students',
        method: 'POST',
        //data: {name: personName.value, age: personAge.value} //携带请求体参数 (默认是json编码)
        data: `name = ${personName.value}&age = ${personAge.value}`//urlencoded
      }).then(
        response=>{
          console.log(response);
        },
        error=>{
          console.log(error);
        })

精简版

    axios.post('http://localhost:3000/students',{name: personName.value, age: personAge.value}).then(
      //`name = ${personName.value}&age = ${personAge.value}`
        response=>{
          console.log(response);
        },
        error=>{
          console.log(error);
        })
    }
    
1.4put请求携带json或者urlencoded参数

完整版

Sever({
        url: 'http://localhost:3000/students',
        method: 'PUT',
        data:{
          id: personUpdateId.value,
          name: personUpdateName.value,
          age: personUpdateAge.value
        }
      }).then(
        response=>{
          console.log(response);
        },
        error=>{
          console.log(error);
        })

精简版

axios.put('http://localhost:3000/students',{
        id: personUpdateId.value,
        name: personUpdateName.value,
        age: personUpdateAge.value
      }).then(
        response=>{
          console.log(response);
        },
        error=>{
          console.log(error);
        })
    }
1.5删除携带params参数
axios({
        url: `http://localhost:3000/students/${personDeleteId.value}`,
        method: 'DELETE',
        
      }).then(
        response=>{
          console.log(response);
        },
        error=>{
          console.log(error);
        })
    }
    

2.axios的常用项

  • axios.default.timeout = 2000. //配置超时

  • axios.default.header = {school: ‘atguigu’} // 配置请求头

  • axios.defualt.baseURL = xxx // 配置默认请求地址

       url: 'http://localhost:3000/students',//请求地址
            method: 'GET',
            params: {a:1,b:2},//配置query参数
            /*data: {c:3,d:4},//配置请求体参数(json编码)
            data:`e=5&f=6`,//配置请求体参数(urlencoded编码)*/
            timeout: 2000,//配置超时的时间
            headers: {demo: 123},//配置请求头
            responseType:'json',//配置响应数据的格式(默认值)
            
          }).then(
            response => {
              console.log('成功了',response);
            },
            reason => {
              console.log('失败了', reason);
            }
          )
        }
    

    3.axios.create方法

    1. 根据指定配置创建一个新的axios, 也就是每个新axios都有自己的配置
    2. 新axios只是没有【取消请求】和【批量发请求】的方法, 其它所有语法都是一致的
    const axios2 = axios.create({
    	timeout:2000,
    	baseURL:'http://localhost:3000'
    })
    
     //给axios配置默认属性
     axios.defaults.timeout = 2000;
     axios.defaults.headers = {school: 'atguigu'};
     axios.defaults.baseURL = 'http://localhost:3000';
    

    4.axios的拦截器

    4.1请求拦截器

    如果同时写了两个响应拦截器那么会优先执行后面的

    axios.interceptors.request.use((config) => {
    	   console.log('请求拦截器执行了1');
          if(Date.now() %2 === 0) {
            config.headers.token = 'atguigu';
          }
          config.a = 1;
          console.log('@',config);
          return config;
    })
    
    4.2响应拦截器
      axios.interceptors.response.use(
          response => {
            console.log('响应拦截器成功的回调执行了',response);
            if(Date.now() %2 === 0) {
              return response.data;
            }else {
              return '时间戳是偶数不能给你数据';
            }
          },
          error =>{
            console.log('响应拦截器失败的回调执行了',error);
            alert(error);
            return new Promise(()=>{});
          }
        );
    

    5.axios中取消请求

      const {CancelToken} = axios; //CancelToken 能为一次请求打标识
        let cancel;
    
        btn1.addEventListener('click',async ()=>{
          axios({
            url: 'http://localhost:3000/students',
            cancelToken:new CancelToken((c)=>{
              console.log(c);//c是一个函数,调用c就可以关闭本次请求
              cancel = c;
            })
          }).then(
            response => {
              console.log('获取数据成功',response);
            },
            error => {
              console.log('获取数据失败',error);
            }
          )
        });
        
        btn2.addEventListener('click', ()=>{
          cancel();
        });
    

    多次点击 每次点击都取消上一次的请求

    const {CancelToken} = axios; //CancelToken 能为一次请求打标识
        let cancel;
    
        btn1.addEventListener('click',async ()=>{
          if(cancel){
            cancel();
          }
          axios({
            url: 'http://localhost:3000/students?delay=3000',
            cancelToken:new CancelToken((c)=>{
              console.log(c);//c是一个函数,调用c就可以关闭本次请求
              cancel = c;
            })
          }).then(
            response => {
              console.log('获取数据成功',response);
            },
            error => {
              console.log('获取数据失败',error);
            }
          )
        });
    

    在响应拦截器中取消请求

    
        //从axios
        const {CancelToken,isCancel} = axios; //CancelToken 能为一次请求打标识
        let cancel;
        axios.interceptors.request.use((config)=>{
          if(cancel) cancel('取消了');
          config.CancelToken = new CancelToken((c)=>{
            cancel = c;
          });
          return config;
        });
    
        axios.interceptors.response.use(
          response => {
            return response.data;
          },
          error => {
            if(isCancel(error)) {
              //如果进入判断,证明:是用户取消了请求
              console.log('用户取消了请求,原因是:',error.message);
            }else{
              console.log('失败了',error);
            }
            return new Promise(()=>{});
          }
        )
    
    
        btn1.addEventListener('click',async ()=>{
          const result = await axios('http://localhost:3000/students?delay=3000');
          console.log(result);
        });
        
        btn2.addEventListener('click', ()=>{
          cancel();
        });
      
    

5.axios批量发送请求

   btn1.addEventListener('click',async ()=>{
      axios.all([
      axios.get(' http://localhost:3000/students'),
      axios.get(' http://localhost:3000/students'),
      axios.get(' http://localhost:3000/students'),
      ]).then(
        response =>{console.log(response);},
        error => {console.log('失败了',error);}
      )
    });
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值