1. 基本特性
2. 语法结构
fetch(url).then(fn2)
.then(fn3)
...
.catch(fn)
3. fetch的基本用法
通过调用fetch的API——data.text() 来获取数据,但是因为这个API返回的是Promise对象,故而把它return出去,然后在下一个.then 里面获取到真正的数据。
fetch('/abc').then(data=>{
// text()方法属于fetch API的一部分,它返回一个Promise实例对象,用于获取后台返回的数据。
return data.text();
}).then(ret=>{
// 注意这里得到的才是最终的数据
console.log(ret);
});
4. fetch请求参数
- 4.1 常用配置选项
fetch('/abc', {
method: 'get'
}).then(data=>{
return data.text();
}).then(ret=>{
// 注意这里得到的才是最终的数据
console.log(ret);
});
- 4.2 GET请求方式的参数传递
(1)方式一:传统方式的URL传递参数 (用 ? 方式传递参数)
fetch('/abc?id=123').then(data=>{
return data.text();
}).then(ret=>{
console.log(ret);
});
(2)方式二:Restful形式的URL传递参数 (直接用 / 方式传递参数)
fetch('/abc/123',{
method: 'get'
}).then(data=>{
return data.text();
}).then(ret=>{
console.log(ret);
});
- 4.3 DELETE请求方式的参数传递
fetch('/abc/123',{
method: 'delete'
}).then(data=>{
return data.text();
}).then(ret=>{
console.log(ret);
});
- 4.4 POST请求方式的参数传递
(1)方式一
fetch('/apples',{
method: 'post',
body: 'uname=zly&pwd=123',
headers: {
'Content-Type': 'application/x-www-form-urlencoded', // 请求头headers必须要设置
}
}).then(data=>{
return data.text();
}).then(ret=>{
console.log(ret);
})
(2)方式二
fetch('/apples',{
method: 'post',
body: JSON.stringify({
uname: 'zly',
age: '18'
})
headers: {
'Content-Type': 'application/json', // 请求头headers必须要设置
}
}).then(data=>{
return data.text();
}).then(ret=>{
console.log(ret);
})
- 4.5 PUT请求方式的参数传递
fetch('/apples/123',{ // 查id=123的数据
method: 'put',
body: JSON.stringify({
uname: 'zly',
age: '18'
})
headers: {
'Content-Type': 'application/json', // 请求头headers必须要设置
}
}).then(data=>{
return data.text();
}).then(ret=>{
console.log(ret);
})
5. fetch响应结果
响应数据格式
(1)获取json格式方式一:
fetch('/abc').then(data=>{
// return data.text();
return data.json();
}).then(ret=>{
console.log(ret);
});
(2)获取json格式方式二:
fetch('/abc').then(data=>{
return data.text();
}).then(ret=>{
console.log(ret);
// 利用text()来接收数据,收到的是一个字符串String,这时可通过JSON.parse()来转化一下
var obj = JSON.parse(ret);
console.log(obj.uname, obj,pwd);
});
1. 基本特性
axios是一个基于Promise用于浏览器和node.js的HTTP客户端。它具有以下特性:
2. axios的基本用法
axios.get('/abc').then(ret=>{
// data属性名称是固定的,用于获取后台响应的数据
console.log(ret.data) // ret可以写成其他,ret.data后面的data是固定写法
})
3. axios的常用API
4. axios的参数传递
axios对返回的结果进行了封装,它返回的是一个对象,所以我们通常用.data的方式获取数据。
- 4.1 GET传递参数
(1)通过URL传递参数
axios.get('/abc?id=123').then(ret=>{
console.log(ret.data)
})
axios.get('/abc/123').then(ret=>{ //Restful
console.log(ret.data)
})
(2)通过params选项传递参数
axios.get('/abc',{
params: {
id:123
}
})
.then(ret=>{
console.log(ret.data)
})
- 4.2 DELETE传递参数
axios.delete('/abc?id=123').then(ret=>{
console.log(ret.data)
})
axios.delete('/abc/123').then(ret=>{ //Restful
console.log(ret.data)
})
axios.delete('/abc',{
params: {
id:123
}
})
.then(ret=>{
console.log(ret.data)
})
- 4.3 POST传递参数
axios.post('/abc',{
uname: 'zhou',
pwd: 123
}).then(ret=>{
console.log(ret.data)
})
const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/api/test', params).then(ret=>{
console.log(ret.data)
})
- 4.4 PUT传递参数
axios.put('/abc/123',{ // id=123
uname: 'zhou',
pwd: 123
}).then(ret=>{
console.log(ret.data)
})
5. axios的响应结果
响应结果的主要属性:
6. axios的全局配置
// 配置请求的基准URL地址
axios.defaults.baseURL = 'http://localhost:3000/';
// 配置请求头信息
axios.defaults.headers['mytoken'] = 'hello';
axios.get('abc').then(ret=>{
console.log(ret.data.uname)
})
// 跨域的请求头需要后台进行配置,如上中的请求头'mytoken'需要后台中允许这个字段才能进行配置
7. axios拦截器
- 7.1 请求拦截器
在请求发出之前设置一些信息
//添加一个请求拦截器
axios.interceptors.request.use(function(config){
//在请求发出之前进行一些信息设置
return config;
},function(err){
//处理响应的错误信息
});
axios.interceptors.request.use(function(config){
config.headers.mytoken = 'nihao';
return config;
},function(err){
console.log(err)
});
- 7.2 响应拦截器
在获取数据之前对数据做一些加工处理
//添加一个响应拦截器
axios.interceptors.response.use(function(res){
//在这里对返回的数据进行处理
return res;
}),function(err){
//处理响应的错误信息
}
axios.interceptors.response.use(function(res){
// console.log(res)
// return res;
var data = res.data;
return data;
},function(err){
console.log(err)
});
1. async/await的基本用法
(一)
async function queryData(id){
const ret = await axios.get('/data');
return ret;
}
queryData.then(ret=>{
console.log(ret)
})
(二)
axios.default.baseURL = 'http:localhost:3000'
async function queryData(){
var ret = await axios.get('abc');
console.log(ret.data)
return ret.data;
}
queryData();
(三)
//await后面要跟一个Promise实例对象
axios.default.baseURL = 'http:localhost:3000'
async function queryData(){
var ret = await new Promise(function(reslove,reject){
setTimeout(function(){
resolve('zhouzhou')
},1000);
})
return ret;
}
queryData().then(function(data){
console.log(data)
})
2. async/await处理多个异步请求
多个异步请求的场景
(一)标准格式
async function queryData(id){
const info = await axios.get('/async1');
const ret = await axios.get('async2?info='+info.data);
return ret;
}
queryData.then(ret=>{
console.log(ret)
})
(二)例子: 用第一个请求的结果作为第二个请求的路径
axios.defaults.baseURL = 'http://localhost:3000';
async function queryData(){
var info = await axios.get('async1');
var ret = await axios.get('async2?info=' + info.data);
return ret.data;
}
queryData().then(function(data){
console.log(data)
})