axios请求中contentType设置与提交数据的形式

axios请求中contentType类型

最近项目遇到刷新token接口有时候会报错的问题,打算配置axios.retry,在接口报错之后重新发起请求。配置的时候不小心写错代码,导致再次发送的请求中传参形式错误,Content-Type也不一致,如下图:
正确传参
传参形式异常
代码中并没有重新配置Content-Type,为什么它会自动变化呢?
查看axios的源码,对hearder的content-type进一步了解发现,axios的Content-Type根据请求方法为’post’、‘put’、‘patch’默认添加了请求头’application/x-www-form-urlencoded’。
在这里插入图片描述
在发送请求的时候,会根据参数的数据类型,重新配置请求头Content-Type。若传参是key1=val1&key2=val2的形式,Content-Type就是’application/x-www-form-urlencoded’,若传参是对象类型,Content-Type对应是’application/json’.

在这里插入图片描述
若传参是formData,则不需要配置content-Type。
在这里插入图片描述
得出结论:
(1) ‘post’、‘put’、‘patch’ 请求方式下的Content-Type首先是默认配置的’application/x-www-form-urlencoded’;
(2) 若传参类型是json对象,请求头就自动更改Content-Type:‘application/json;charset=utf-8’;
(3) 传参是formData类型时,浏览器自己设定content-type。
所以在我们的代码中,一般不用设置默认的content-type。

不同类型的content-type传参格式

在axios的配置中,params用于接收与请求一起发送的URL参数,它要求接收的数据必须是一个无格式对象或URLSearchParams对象,一般用于get方法中。data用于请求方法为’put’、‘post’、‘patch’,在没有设置transformRequest时,要求接收的数据类型为string、plain object、ArrayBuffer、ArrayBufferView、URLSearchParams。
一、application/x-www-form-urlencoded
这种方式提交的数据为键值对并按照key1=val1&key2=val2的方式进行编码。

import qs from 'qs';
const data={'bar':123};
const options={
	method:'POST',
	headers:{'content-type':'application/x-www-form-urlencoded'},
	data:qs.stringify(data),
	url,
};
axios(options);

二、application/json
application/json作为请求头,用来告诉服务端消息主体是序列化的JSON字符串。

const data={'bar':123};
const options={
	method:'POST',
	headers:{'content-type':application/json'},
	data:data,
	url,
};
axios(options);

三、multipart/form-data
这种方式既可以上传键值对,也可以用于上传文件。

 const formData = new FormData();
 formData.append('file', this.form.file.raw);
const options={
	method:'POST',
	data:formData,
	url,
};
axios(options);
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值