标签:export OLE 过滤 xmlhttp 参数 head 无法 模拟 requested
淘汰ajax,jquery ajax,选择axios
axios名称的由来? 个人理解
axios: ajax i/o system
使用方法和promist.all一样。
在axios.all([])放入并发请求的axios,都请求成功后在then中回调
axios.all([])返回的是一个数组,axios还提供了axios.spread,
它可以将数组展开使用,res1,res2,,
//这个httpbin.org网站可以做很多网络请求模拟,没有接口可以尝试用这个
axios.all([
axios({
url:'接口1',
}),
axios({
url:'接口2',
params:{
type:'pop',
page:1
}
})
]).then(axios.spread((res1,res2) => {
console.log(res1);
console.log(res2);
}))
如果想两个接口内容相同,我们只需获取一个接口的话,请参考axios封装第二步,封装两个接口,
在catch中使用接口2并传入参数即可。
把一些固定的参数抽取出来进行全局配置
axios.defaults.timeout = 1000
axios.defaults.baseURL = '基础接口';
//后面设置url的时候只需写路径即可,如/home/data
在开发中有可能我们用的不是一个接口,这个时候使用全局配置就无法获取多个接口了
我们可以创建一个axios实例,一个实例对应一个接口和相应配置,提高开发效率。
在网络开发中,我们使用第三方插件有可能出现第三方插件重大bug或不再维护的情况
当出问题时多个页面修改第三方插件是一件很麻烦的事,所以我们可以封装一个文件作为代理
其他页面从代理中传入config并获取请求,当第三方插件失效只需修改代理文件即可,无需全部修改
import axios from 'axios'
export function request(config) {
return new Promise((resolve, reject) => {
const instance = axios.create({
baseURL:'http://123.207.32.32:8000/api/hy',
timeout:5000
})
instance(
config
).then( res => {
resolve(res)
}).catch(err =>{
reject(err)
})
})
}
在axios实例中已经内置了promise,所以我们才能回调then/catch,
为什么我们还要再使用promise再回调一次呢,我们的目的是返回结果,
直接把axios实例返回出去不就好了嘛
import axios from 'axios'
export function request(config) {
const instance = axios.create({
baseURL:'http://123.207.32.32:8000/api/hy',
timeout:5000
})
return instance(config)
}
啰嗦一句。这里不是export default导出。导入的话记得加import{} 花括号
全局拦截:
拦截器前面使用axios
局部拦截:
拦截器前面使用的是实例的名称
拦截四种方式:
request失败拦截
instance.interceptors.request.use(config =>{
console.log(config);
return config
},error => {
console.log(error);
})
response失败拦截
instance.interceptors.response.use(result =>{
console.log(result);
return result.data
},error => {
console.log(error);
})
拦截器需求列举
注意事项:
标签:export OLE 过滤 xmlhttp 参数 head 无法 模拟 requested
原文地址:https://www.cnblogs.com/lovecode3000/p/12323078.html