fetch
fetch基本特性
- 相比Ajax更加简单地数据获取方式,功能更强大,更灵活,可以看作是传统Ajax升级版
- 一个基本地fetch请求很简单,如下:
fetch(url)
.then(function(response) {
return response.text();
})
.then(function(data) {
console.log(data);
});
/*
第一个then方法获取数据,但不可以直接拿到数据
返回值是一个Promise对象,这个返回值不管请求是否成功都返回一个Promise对象
第二个then就可以直接拿到数据使用
*/
- fetch接受第二个可选参数
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基本用法
axios.get('url')
.then((data) => {
// data属性名是固定的,用于获取后台响应的数据
console.log(data.data)
})
// 这个then返回的data是一个axios对象,改对象里有个data属性,值是响应的data数据
axios响应结果
响应结果的主要属性
- data:实际响应回来的数据
- hearders:响应头信息
- status:响应状态码
- statusText:响应状态信息
axios 的全局配置
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拦截器
- 请求拦截器
(在请求发送之前设置一些信息)
// 请求拦截器
axios.interceptors.request.use(function(config){
console.log(config.url); // 打印请求地址
config.headers.mytoken = 'nihao' // 给请求偷添加一个属性mytoken值为‘nihao’
return config // 一定要return,返回一个对象
},function(err){
console.log(err);
})
- 响应拦截器
(在获取数据之前对数据做一些加工处理)
//响应拦截器
axios.interceptors.response.use(res => {
console.log(res); // axios对象
return res.data // 数据处理
},(err) => {
console.log(err);
})
async/await
async/await 的基本用法
- async/await是es7引入的新语法,可以更加方便地进行异步操作
- async关键字用于函数上 (async函数地返回值是Promise实例对象)
- await关键字用于async函数中(await可以得到异步地结果)
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先后输出
// 多个异步请求
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);
})