axios和fetch区别与使用

前言

在JS中我们都是用AJAX发送异步请求,promise解决异步回调地狱的,后来产生的jq把ajax进行封装,根本上解决了兼容性问题,但还没有解决异步回调地狱的问题,最后官方直接封装fetch方法,不需要直接导入库直接使用(fetch = XMLHttpRequest + promise)
Vue2.0之后大部分人使用axios比较多,而axios也是基于ajax和promise封装的,但它比fetch更强大,下面就介绍一下它两的区别:
相同点:
1.都是项目用来发送异步请求的
2.都是基于XMLHttpRequest + promise
不同点:
1- axios是第三方封装的,fetch是官方封装的
2- axios更强(并发&拦截器 -> 写项目说)
3- fetch每次都需要then res.json()

它两的语法:

//GET
axios({
    method:"get"
    //方案1
    //url:"http://118.31.9.103/请求路径?参数1=值1&....&参数n=值n",
    //方案2(推荐)
    url:"http://118.31.9.103/请求路径",
    params: {:,...,键n:值n}
}).then(res => {
}).catch(error=>{
  console.log(error)
})
//POST
axios({
    url:"http://118.31.9.103/请求路径",
    method:"post",
    data:"参数1=值1&....&参数n=值n"
}).then(res => {
}).catch(error=>{
  console.log(error)
})
fetch(请求地址,{
 method: 请求方式,
 headers:{},
//body:"name=kerwin&age=100"
 body:JSON.stringify({
    数据1:1,
    数据n: 值n
 })
}).then(res=> res.json()).then(res=>{
 console.log(res);
})

在vue和react中可以在src中创建api/index.js

//1.引入axios模块
import axios from 'axios'
//2.全局配置
axios.defaults.baseURL = '请求地址'

//3.添加请求拦截器
// axios.interceptors.request.use(function (config) {
//     //1.获取token
//     let token = localStorage.getItem('token')
//     //2.判断
//     if (token) {
//         //设置请求头(后期请求接口 http请求头携带Authorization参数)
//         config.headers['Authorization'] = token
//     }
//     return config 
// }, function (error) {
//     // Do something with request error
//     return Promise.reject(error)
// })})
// 在实例已创建后修改默认值,比如请求时需要拿到token值
// instance.defaults.headers.common['token'] = token
// 自定义超时时间
axios.instance.defaults.timeout = 6000
// let token = localStorage.getItem('token') ||  '固定的'
// let token = localStorage.getItem('token')
// axios.defaults.headers.common['Authorization'] = token
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    //1.获取token
    var token = localStorage.getItem('token') 
    //2.判断
    if (token) {
        //设置请求头(后期请求接口 http请求头携带Authorization参数)
        config.headers['Authorization'] = token
    }
    return config
}, function (error) {
    // Do something with request error
    return Promise.reject(error)
})
// 每一次拿到数据都需要经过这里 - 添加响应拦截器
axios.instance.interceptors.response.use(function (response) {
  // 对响应数据做点什么 --- 关闭loading动画
  return response
}, function (error) {
  // 对响应错误做点什么
  return Promise.reject(error)
})
// 语法
// GET      axios.get(请求路径,{params: 数据对象})   
//          axios.get(请求路径,{params: {uname:'aaa', pwd:'bbb'}})   
// POST     axios.post(请求路径,数据对象)   
// PUT      axios.put(请求路径,数据对象)   
// DELETE   axios.delete(`请求路径/${id}`)   

// 统一:HTTP请求动词+模块名


// export const login = postData => { // {username:'', password}
//     return axios.post('login', postData).then(res=>res.data)
// }
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值