axios,Ajax,jQuery ajax,axios和fetch的区别

╰半橙微兮° 2022-05-28 01:55 326阅读 0赞

提纲:

  1. Axios的概念
  2. 安装
  3. Axios简单示例
  4. Axios的API
  5. Axios的请求配置和响应数据格式
  6. Axios的拦截器
  7. Ajax,jQuery ajax,axios和fetch的区别

内容:

#

  1. Axios的概念

    axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
    特点:
    从浏览器中创建 XMLHttpRequests
    从 node.js 创建 http 请求
    支持 Promise API
    拦截请求和响应
    转换请求数据和响应数据
    取消请求
    自动转换 JSON 数据

客户端支持防御 XSRF

2.安装

安装nodejs(自带npm)

安装cnpm(可选)
npm install -g cnpm —registry=https://registry.npm.taobao.org
初始化项目:
npm init -y
Npm的方式安装axios
npm i axios -D

3. Axios简单示例

1)、get请求

let vueobj = this;
axios.get(‘api/goodslists’, {
params: { “goodsid”:”01003” }
} )
.then(function (response) {
console.log(response.data);
vueobj.goodslist = response.data; //把获取到的数据赋给goodslist
})
.catch(function (error) {
console.log(error);
});

2)、执行多个并发请求

getall:function(){
function getbooks(){ return axios.get(‘api/books’); }
function getreaders(){ return axios.get(‘api/readers’); }
axios.all([getbooks(), getreaders()]).then(
axios.spread(function (books, readers) {
//两个请求都完成后,调用该函数,第一个参数是第一个请求的结果,第二个参数是第二个请求的结果
console.log(books.data);
console.log(readers.data);
})
);
}

4.Axios的API

  • Axios函数
  • Axios请求的别名
  • Axios处理并发
  • 创建一个实例,实例方法

1)、axios函数:

axios(config)。在config对象参数里,除了url外,其它的都可选的属性。
axios 能够在进行请求时的一些设置。如:
发起 get请求 let vueobj = this;
axios({
method:’get’,
url:’api/goodslists’,
params :{ “goodsid”:”01003” }
})
.then(function (response) {
vueobj.goodslist = response.data;
})
.catch(function (error) {
console.log(error);

});

2)、axios请求的别名:

为了方便,axios提供了所有请求方法的重命名支持,如下:
axios.request(config)
axios.get(url[,config])
axios.delete(url[,config])
axios.head(url[,config])
axios.post(url[,data[,config]])
axios.put(url[,data[,config]])
axios.patch(url[,data[,config]])

  1. 1axios.request(config)

let vueobj = this;
axios.request({
method:’get’,
url:’api/goodslists’,
params:{ “goodsid”:”01002” }
})
.then(function (response) {
vueobj.goodslist = response.data;
})
.catch(function (error) {
console.log(error);
});

  1. axios.get(url[,config])

let vueobj = this;
axios.get(‘api/goodslists’, {
params:{
“goodsid”:”01003”
}
})
.then(function (response) {
vueobj.goodslist = response.data;
})
.catch(function (error) {
console.log(error);
});

  1. Axios处理并发( Concurrency)

axios.all(iterable)//all函数执行所有的请求

axios.spread(callback)//处理响应回来的回调函数

代码:

getall:function(){
function getbooks(){ return axios.get(‘api/books’); }
function getreaders(){ return axios.get(‘api/readers’); }
axios.all([getbooks(), getreaders()]).then(
axios.spread(function (books, readers) {
//两个请求都完成后,调用该函数,第一个参数是第一个请求的结果,第二个参数是第二个请求的结果
console.log(books.data);
console.log(readers.data);
})
);
}

4.创建一个实例,实例方法

创建一个新的实例
axios.create([config])
实例方法
下面列出了一些实例方法。具体的设置将在实例设置中被合并。
axios#request(config)
axios#get(url[,config])
axios#delete(url[,config])
axios#head(url[,config])
axios#post(url[,data[,config]])
axios#put(url[,data[,config]])

axios#patch(url[,data[,config]])

代码:

//1、创建axios实例
var instance = axios.create({
method:’get’,
url:’api/goodslists’,
params:{ “goodsid”:”01002” }
});
//2、发送请求
instance.request()
.then(function (response) {
console.log(response.data);
vueobj.goodslist = response.data;
})
.catch(function (error) {
console.log(error);
});

5. Axios的 请求配置和响应数据格式

1)、请求的配置

//`url`是服务器链接,用来请求用
url:’/user’,
//`method`是发起请求时的请求方法
method:`get`,
//`baseURL`如果`url`不是绝对地址,那么将会加在其前面。
//当axios使用相对地址时这个设置非常方便
//在其实例中的方法
baseURL:’http://some-domain.com/api/‘,
//`transformRequest`允许请求的数据在传到服务器之前进行转化。
//这个只适用于`PUT`,`GET`,`PATCH`方法。
//数组中的最后一个函数必须返回一个字符串,一个`ArrayBuffer`,或者`Stream`
transformRequest:[function(data){
//依自己的需求对请求数据进行处理
return data;
}],
//`transformResponse`允许返回的数据传入then/catch之前进行处理
transformResponse:[function(data){
//依需要对数据进行处理
return data;
}],
//`headers`是自定义的要被发送的头信息
headers:{‘X-Requested-with’:’XMLHttpRequest’},
//`params`是请求连接中的请求参数,必须是一个纯对象,或者URLSearchParams对象
params:{ ID:12345 },

//`paramsSerializer`是一个可选的函数,是用来序列化参数
//例如:(https://ww.npmjs.com/package/qs,http://api.jquery.com/jquery.param/)
paramsSerializer: function(params){
return Qs.stringify(params,{arrayFormat:’brackets’})
},

  1. //\`data\`是请求提需要设置的数据
  2. //只适用于应用的'PUT','POST','PATCH',请求方法
  3. //当没有设置\`transformRequest\`时,必须是以下其中之一的类型(不可重复?):
  4. //-string,plain object,ArrayBuffer,ArrayBufferView,URLSearchParams
  5. //-仅浏览器:FormData,File,Blob
  6. //-仅Node:Stream
  7. data:\{
  8. firstName:'fred'
  9. \},
  10. //\`timeout\`定义请求的时间,单位是毫秒。
  11. //如果请求的时间超过这个设定时间,请求将会停止。
  12. timeout:1000,
  13. //\`withCredentials\`表明是否跨域请求,
  14. //应该是用证书
  15. withCredentials:false //默认值
  16. //\`adapter\`适配器,允许自定义处理请求,这会使测试更简单。
  17. //返回一个promise,并且提供验证返回(查看\[response docs\](\#response-api))
  18. adapter:function(config)\{
  19. /\*...\*/
  20. \},

//`xsrfHeaderName` 是http头(header)的名字,并且该头携带xsrf的值
xrsfHeadername:’X-XSRF-TOKEN’,//默认值

  1. //\`onUploadProgress\`允许处理上传过程的事件
  2. onUploadProgress: function(progressEvent)\{
  3. //本地过程事件发生时想做的事
  4. \},
  5. //\`onDownloadProgress\`允许处理下载过程的事件
  6. onDownloadProgress: function(progressEvent)\{
  7. //下载过程中想做的事
  8. \},
  9. //\`maxContentLength\` 定义http返回内容的最大容量
  10. maxContentLength: 2000,
  11. //\`validateStatus\` 定义promise的resolve和reject。
  12. //http返回状态码,如果\`validateStatus\`返回true(或者设置成null/undefined),promise将会接受;其他的promise将会拒绝。
  13. validateStatus: function(status)\{
  14. return status >= 200 && stauts < 300;//默认
  15. \},
  16. //\`httpAgent\` 和 \`httpsAgent\`当产生一个http或者https请求时分别定义一个自定义的代理,在nodejs中。
  17. //这个允许设置一些选选个,像是\`keepAlive\`--这个在默认中是没有开启的。
  18. httpAgent: new http.Agent(\{keepAlive:treu\}),
  19. httpsAgent: new https.Agent(\{keepAlive:true\}),
  20. //\`proxy\`定义服务器的主机名字和端口号。
  21. //\`auth\`表明HTTP基本认证应该跟\`proxy\`相连接,并且提供证书。
  22. //这个将设置一个'Proxy-Authorization'头(header),覆盖原先自定义的。
  23. proxy:\{
  24. host:127.0.0.1,
  25. port:9000,
  26. auth:\{
  27. username:'cdd',
  28. password:'123456'
  29. \}
  30. \},
  31. //\`cancelTaken\` 定义一个取消,能够用来取消请求
  32. //(查看 下面的Cancellation 的详细部分)
  33. cancelToke: new CancelToken(function(cancel)\{
  34. \})

}

2)、响应数据的格式:

{
//`data`是服务器的提供的回复(相对于请求)
data{},

  1. //\`status\`是服务器返回的http状态码
  2. status:200,
  3. //\`statusText\`是服务器返回的http状态信息
  4. statusText: 'ok',
  5. //\`headers\`是服务器返回中携带的headers
  6. headers:\{\},
  7. //\`config\`是对axios进行的设置,目的是为了请求(request)
  8. config:\{\}

}

使用 then ,你会接受打下面的信息

axios.get(‘/user/12345’)
.then(function(response){
console.log(response.data);
console.log(response.status);
console.log(response.statusText);
console.log(response.headers);
console.log(response.config);
});
使用 catch 时,或者传入一个 reject callback 作为 then 的第二个参数,那么返回的错误信息将能够被使用。

6.Axios的拦截器

你可以在请求或者返回被 then 或者 catch 处理之前对它们进行拦截。

20180327183727369

1)、请求拦截器
axios.interceptors.request.use(
function (config) {//config参数是请求的配置
config.url=‘api/goodslists’;//发送请求前,修改请求的url
return config
},
function (error) {
console.log(‘请求失败’)
return Promise.reject(error)
}
);

2)、响应拦截器

axios.interceptors.response.use(
function (response) {//response参数是响应对象
response.data.unshift({“goodsid”:“商品编号”,“goodsname”:“商品名称”,“goodsprice”:“商品价格”});//给响应的数据增加一个对象
return response;
}, function (error) {
console.log(‘响应出错’)
return Promise.reject(error)

})

3)、请求的代码:
let vueobj = this;
axios.request({
method:’get’,
url:’api/readers’,
params:{
“goodsid”:”01002”
}
})
.then(function (response) {
console.log(response.data);
vueobj.goodslist = response.data;
})
.catch(function (error) {
console.log(error);
});

7.Ajax,jQuery ajax,axios和fetch的区别

Ajax:
ajax自然不必说,最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱。
Jquery Ajax:
是jQuery框架中的发送后端请求技术,由于jQuery是基于原始的基础上做的封装,所以,jquery Ajax自然也是原始ajax的封装
Fetch:
fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。Fetch是基于promise设计的。Fetch的代码结构比起ajax简单多了,参数有点像jQuery ajax。但是,一定记住fetch不是ajax的进一步封装,而是原生js。Fetch函数就是原生js,没有使用XMLHttpRequest对象。
axios:

  1. axios不是原生JS的,需要进行安装,它不带可以在客户端使用,也可以在nodejs端使用。Axios也可以在请求和响应阶段进行拦截。同样也是基于promise对象的。具体参照axios的概念

谢谢,加油!

发表评论

表情:
评论列表 (有 0 条评论,326人围观)

还没有评论,来说两句吧...

相关阅读