fetch
Fetch API
fetch基本特性
- 相比Ajax更加简单地数据获取方式,功能更强大,更灵活,可以看作是传统Ajax升级版
- 一个基本地fetch请求很简单,如下:
1 2 3 4 5 6 7 8 9 10 11 12 | fetch(url) .then(function(response) { return response.text(); }) .then(function(data) { console.log(data); }); /* 第一个then方法获取数据,但不可以直接拿到数据 返回值是一个Promise对象,这个返回值不管请求是否成功都返回一个Promise对象 第二个then就可以直接拿到数据使用 */ |
- fetch接受第二个可选参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | fetch(url, { // 设置发送请求方式 method: 'POST', //处理发送请求的json数据 body: JSON.stringify(data), // 设置请求头 headers: { 'content-type': 'application/json' // 数据格式 }, //包含请求的缓存模式 (default, reload, no-cache) cache: 'no-cache', //包含请求的模式 (cors, no-cors, same-origin, navigate) //no-cors: 常用于跨域请求不带CORS响应头场景 //cors表示同域和带有CORS响应头的跨域下可请求成功 mode: 'cors' }) .then(response => response.json()) .catch(error => console.log(error)) .then(response => console.log(response)); |
axios
下载地址
- Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中
axios特性
- 从浏览器中创建 XMLHttpRequests
- 从 node.js 创建 http 请求
- 支持 Promise API
- 拦截请求和响应
- 转换请求数据和响应数据
- 取消请求
- 自动转换 JSON 数据
axios基本用法
1 2 3 4 5 6 | axios.get('url') .then((data) => { // data属性名是固定的,用于获取后台响应的数据 console.log(data.data) }) // 这个then返回的data是一个axios对象,改对象里有个data属性,值是响应的data数据 |
axios响应结果
响应结果的主要属性
- data:实际响应回来的数据
- hearders:响应头信息
- status:响应状态码
- statusText:响应状态信息
axios 的全局配置
1 2 3 4 5 6 7 8 9 10 11 12 13 | axios.defaults.timeout = 3000; //超时时间 axios.defaults.baseURL = 'http://localhost:3000' //默认地址 axios.defaults.headers['mytoken'] = 'hello' //设置请求头,请求头会多出一个mytoken属性,值为hello // 表单数据的提交 // 表单数据 var params = new URLSearchParams(); params.append('uname','XiaoPan') params.append('pwd','123456789') axios.post('/axios',params) // 这个请求地址 /axios 会自动拼接上面设置的默认地址,再发送请求 .then(ret => { console.log(ret.data); }) |
axios拦截器
- 请求拦截器
(在请求发送之前设置一些信息)
1 2 3 4 5 6 7 8 | // 请求拦截器 axios.interceptors.request.use(function(config){ console.log(config.url); // 打印请求地址 config.headers.mytoken = 'nihao' // 给请求偷添加一个属性mytoken值为‘nihao’ return config // 一定要return,返回一个对象 },function(err){ console.log(err); }) |
- 响应拦截器
(在获取数据之前对数据做一些加工处理)
1 2 3 4 5 6 7 | //响应拦截器 axios.interceptors.response.use(res => { console.log(res); // axios对象 return res.data // 数据处理 },(err) => { console.log(err); }) |
async/await
async function
async/await 的基本用法
- async/await是es7引入的新语法,可以更加方便地进行异步操作
- async关键字用于函数上 (async函数地返回值是Promise实例对象)
- await关键字用于async函数中(await可以得到异步地结果)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | axios.defaults.baseURL = 'http://localhost:3000' axios.get('/adata').then(data => { console.log(data.data); }) async function queryData(){ return await axios.get('/adata') } // async 返回的是一个Promise实例对象 queryData().then(data => { console.log(data); }) // await后面也可以是一个Promise实例对象 async function Data(){ return await new Promise((resolve,reject) => { setTimeout(() => { resolve('hhhh') },1000) }) } queryData().then(data => { console.log(data); // 1s后打印 hhh }) |
- async/await发送多个异步请求,且输出顺序会根据你的await先后输出
1 2 3 4 5 6 7 8 9 | // 多个异步请求 async function aa(){ const info = await axios('/async1').data const data = await axios('/async2?info='+ info) return data } aa().then(data => { console.log(data.data); }) |