vue headers修改为json_Vue中发送ajax请求的库有哪些?

本文介绍了Vue中两个常用的发送ajax请求的库:vue-resource和Axios。详细讲解了如何使用vue-resource进行POST、GET等请求,并分析了axios的配置、别名、拦截器和错误处理等功能。同时提到了跨域预检和取消请求的处理。
摘要由CSDN通过智能技术生成

一、vue-resource

在Vue中实现异步加载需要使用到vue-resource库,利用该库发送ajax(Vue官方已不再维护这个库)。

1、引入vue-resource:<script src="https://cdn.jsdelivr.net/npm/vue-resource@1.5.1"></script>

要注意的是,vue-resource依赖于Vue,所以要先引入Vue,再引入vue-resource。

引入vue-resource之后,在Vue的全局上会挂载一个$http方法,在vm.$http方法上有一系列方法,每个HTTP请求类型都有一个对应的方法。

vue-resource使用了promise,所以$http中的方法的返回值是一个promise。

2、请求方法:

1)POST请求:用于提交数据

常用data格式:

- 表单提交:multipart / form-data,比较老的网站会使用表单提交去获取数据,现在基本都不用表单提交,而是使用ajax,但是现在表单提交仍然存在,有时候需要做图片上传、文件上传。

- 文件上传:application / json,现在大多数情况下都是用这个格式。

使用方法:vm.$http.post(url, [body], [options])

- url: 必需,请求目标url

- body: 非必需,作为请求体发送的数据

- options:非必需,作为请求体发送的数据

html:

31b36e685a3b4269109f39ef5bd8f775.png

css:

760eb530e6d089094540d34369dbc4e8.png

38ad284c6f20d59251da33d4e6413ae4.png

js:

46443e4f5c1bf8d4a8bc2496fca347ad.png

f004a1eb0befd0f4d5883e4e036e1110.png

当数据提交成功时:

a8c9d00b41c84e3820a52321a22f5502.png

8dd9365a09a232aef8a5c645704d5583.png

888ef7a7ec41e3731668c877af73ee79.png

当数据提交发生错误时:

3af5cbe0b56360fad9be348d11cf4d7f.png

2)GET请求:用于获取数据

使用方法:vm.$http.get(url, [options])

html:

78c02978796e1a52a02dfb55103c7138.png

css: 和上面一样

760eb530e6d089094540d34369dbc4e8.png

38ad284c6f20d59251da33d4e6413ae4.png

js:

f62771bfeb3e4199b728219a5f2c9094.png

4f86680b15675b9b52ff5ee54b979c20.png

1f07a0333177f783a2ef9a750fafee0d.png

06b85f5bb7117858b04f361af71bfa12.png

3)PUT请求:更新数据,将所有的数据全都推送到后端

使用方法:vm.$http.put(url, [body], [config])

4)PATCH请求:更新数据,只将修改的数据全都推送到后端

使用方法:vm.$http.patch(url, [body], [config])

5)DELETE请求:删除数据

使用方法:vm.$http.delete(url, [config])

6)HEAD请求:请求头部信息

使用方法:vm.$http.head(url, [config])

7)JSONP请求:

除了jsonp以外,以上6种的API名称是标准的HTTP方法。

使用方法:vm.$http.jsonp(url, [options]);

html:

80a2de37ac0279940f9a08d1266c2fec.png

css: 和上面一样

js:

c6f57e52ecbecbca6b3eeca5c6bd3beb.png

a190a87362dd7f3cb9f412ab93c8816c.png

3、options 参数说明:

参数 | 类型 | 描述

url | String | 请求目标url |

body | Object, FormData, string | 作为请求体发送的数据 |

headers | Object | 作为请求头部发送的头部对象 |

params | Object | 作为URL参数的参数对象 |

method | String | HTTP方法 (例如GET,POST,...) |

responseType | String | 设置返回数据的类型 |

timeout | Number | 在请求发送之前修改请求的回调函数 |

credentials | Boolean | 是否需要出示用于跨站点请求的凭据 |

emulateHTTP | Boolean | 是否需要通过设置X-HTTP-Method-Override头部并且以传统POST方式发送PUT,PATCH和DELETE请求。 |

emulateJSON | Boolean | 设置请求体的类型为application/x-www-form-urlencoded |

before | function(request) | 在请求发送之前修改请求的回调函数 |

uploadProgress | function(event) | 用于处理上传进度的回调函数 |

downloadProgress | function(event) | 用于处理下载进度的回调函数 |

4、响应对象:

通过如下属性和方法处理一个请求获取到的响应对象。

1)属性

属性 | 类型 | 描述

url | String | 响应的 URL 源 |

body | Object, Blob, string | 响应体数据 |

headers | Header | 请求头部对象 |

ok | Boolean | 当 HTTP 响应码为 200 到 299 之间的数值时该值为 true |

status | Number | HTTP 响应码 |

statusText | String | HTTP 响应状态

2)方法

方法 | 描述

text() | 以字符串方式返回响应体 |

blob() | 以二进制 Blob 对象方式返回响应体 |

json() | 以格式化后的 json 对象方式返回响应体 |

二、Axios

Axios是一个基于promise的HTTP库。

浏览器支持情况:Chrome、Firefox、Safari、Opera、Edge、IE8+。

1、引入:<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

2、API:

- axios(config)

- axios(url, [config])

3、config 配置对象:

最常用的配置:

b7982249902b0b03eb73c85273b61f70.png

4、方法别名:

为方便起见,为所有支持的请求方法提供了别名。

- axios.request(config)

- axios.get(url, [config])

- axios.post(url, [data], [config]])

- axios.delete(url, [config])

- axios.head(url, [config])

- axios.put(url, [data], [config])

- axios.patch(url, [data], [config]])

- axios.options(url, [config])

1)GET请求:

html:

ff6c27d6bc33dfc7f1a4d2299f19735b.png

css:

c447a17e280b51d2dad291406a0fdc3f.png

bcc6c26593700b22784b5489f071e54d.png

js:

使用axios.get(url, [config]):

e4e0353803d7f1fabb9720d820ef4836.png

28df0bbc9bb74bf897e17c4773baeca3.png

c5bd600bb0e824a917ab144bf08d8fb3.png

5b5b5b2258df8c370c1238e0630e623f.png

4f20e741c4599f2e437d91deb17df85d.png

2)POST请求:

6b31adb10334f02c2d2c77a9408d9d68.png

3f4410aa2b5f97de74ff2305114f9704.png

8229a128e2b3b6594f74cbc500be01c2.png

5、配置默认值:

可以指定将被用在各个请求的配置默认值。

1)全局配置

在实际项目中,很少用全局配置。

e4399e30c2afc45b17edd4e96ec15bb4.png

2)实例配置

> 可以使用自定义配置新建一个axios实例

0a26c7319c6bba3618707ea82d30a9fb.png

acde4927d2847c90a8eb3f29eac8a62b.png

702b6afaa592672700b43052ef4b557d.png

41ec9e48f709e9f703dd3e40e34529cd.png

3)请求配置

配置的优先顺序:全局 < 实例 < 请求

4)并发

同时进行多个请求,并统一处理返回值。

- axios.all(iterable)

- axios.spread(callback)

9088ee073c4a4edca23d94ab7c5443af.png

215796ea946c3828e9a885b0b5bf8958.png

dfb23a6a608b044d900bf103c9140032.png

6、拦截器

interceptors,在发起请求之前做一些处理,或者在响应回来之后做一些处理。

1)请求拦截器

0aa2f2cb679d2ab078b71db4149ece47.png

2a14d2f507342fd0f0cf5e9a34a87530.png

c1a3bc83e6893070aa8caebafd64b0be.png

2)响应拦截器

06debad441ac76ef7af6f65764949f1f.png

c562994a221f292880641a3fd2118a9a.png

9288647760a90a1d715380fff89ec67f.png

31b8378fd1329ba63cbf7fca5dab8ef1.png

3)移除拦截器

没有移除拦截的时候,

1fe93ec04a2b4cfea63b5bef943f1b5a.png

2d6f9e48fdd9d12f040964a0b641a5e5.png

移除拦截器之后,

7f8429a1514db1f37ee6e47b1b78b6fd.png

46871c3e7bf7b3832265b12174c8fd61.png

4)为axios实例添加拦截器

f48a8668d0302b27066c502261043a77.png

7、取消请求

用于取消正在进行的http请求。

426c721b84a3d51d8e34a106e3b8621f.png

a767dbb2a20be8c1165c1376f3108d10.png

8d260cd85058482717a430e3b1d83133.png

f9687fcee8b5cb9ebae0e6b882daff7a.png

5309788fece13c034a353d7781aded2f.png

b5d3e9c4681c0e6df69775d23d32b9eb.png

8、错误处理

在请求错误时进行的处理。

b5d3e9c4681c0e6df69775d23d32b9eb.png

request / response 是error的上下文,标志着请求发送 / 得到响应

在错误中,如果响应有值,则说明是响应时出现了错误。

如果响应没值,则说明是请求时出现了错误。

在错误中,如果请求无值,则说明是请求未发送出去,如取消请求。

c94882ad15a31373ca9d39ba504a6772.png

3af2379f93f6220256364828b54cf82f.png

60ad7eb711371f599a54d2d9fb191a13.png

892ceb379c03e10d8cabdf7e1f153f56.png

d41408b214d18b16bf6e2551d0b821c2.png

在实际开发过程中,一般在拦截器中统一添加错误处理。

在更多的情况下,我们会在响应拦截器中处理错误。

bc37aa46ca8ae40710c3832ffbb8f7ac.png

2fec73510d8e1614ed7e7e14e980b8c5.png

167af2fb2c092a083c2cb1570f412dbd.png

f248053bb150377ebf103ab32fff2ee8.png

请求拦截器中的错误,会当请求未成功发出时执行,但是要注意的是:取消请求后,请求拦截器的错误函数也不会执行,因为取消请求不会抛出异常,axios对其进行了单独的处理。

9、axios 预检

当axios的请求为非简单请求时,浏览器会进行预检,及发送OPTIONS请求。请求到服务器,询问是否允许跨域。如果响应中允许预检中请求的跨域行为,则浏览器会进行真正的请求。否则会报405错误。

07df264b0e5df64b2d947ada0b00aeab.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值