背景:在做项目的登录系统时,由于后端采用了一种框架,他接受登录接口必须走form表单提交的那种形式,但我们前端用的都是UI框架,很少有<form action="form_action.asp" method="get"></form>
这种写法去提交表单数据,所以我们要用axios模拟一个表单提交接口。
技术:vue-cli 3.x + axios + iView
首先,我们要对Http中的Content-Type有个了解。
Content-Type 代表发送端(客户端|服务器)发送的实体数据的数据类型。
一般,我们会在axios做拦截的时候默认设置,Axios.defaults.headers['Content-Type'] = "application/json"
,这时我们要发送浏览器的原生 form 表单形式的数据时,就会有问题;
解决方法:
最主要的一点是要设置Content-Type:浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
设置Axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
,此时方法中传递的参数会有问题需要用qs.stringify包一下,需要引入qs,params = qs.stringify(params)
即可。
以上操作的文件是axios公共的拦截文件,所以不应该直接修改
Axios.defaults.headers['Content-Type']
,这样会影响其他使用axios的方法,这时,可以对axios进行封装,通过具体的方法传不同的’Content-Type’来满足不同的需求。