用axios模拟一个form表单提交形式接口

背景:在做项目的登录系统时,由于后端采用了一种框架,他接受登录接口必须走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’来满足不同的需求。

如果你想要根据接口返回的值来判断校验是否通过,你可以在接口调用完成后,将返回的值与表单数据进行比较。以下是一个示例: ```html <template> <div> <input v-model="email" placeholder="Email"> <span v-if="isEmailInvalid" style="color: red;">Invalid email!</span> <button @click="submitForm">Submit</button> </div> </template> <script> export default { data() { return { email: '', }; }, computed: { isEmailInvalid() { return !isValidEmail(this.email); }, }, methods: { submitForm() { if (this.isEmailInvalid) { // 校验失败,不执行接口调用 return; } // 校验通过,执行接口调用 this.callAPI(); }, callAPI() { // 在这里调用后端接口进行同步操作 // 可以使用 axios、fetch 或其他方式进行网络请求 // 例如: // axios.post('/api/submit', { email: this.email }) // .then(response => { // // 处理接口响应 // if (response.data.isValid) { // // 接口返回校验通过 // this.handleSuccess(); // } else { // // 接口返回校验失败 // this.handleFailure(); // } // }) // .catch(error => { // // 处理错误 // this.handleError(); // }) // 为了演示,我们假设接口返回的数据是一个对象 { isValid: true } const response = { isValid: true }; if (response.isValid) { // 接口返回校验通过 this.handleSuccess(); } else { // 接口返回校验失败 this.handleFailure(); } }, handleSuccess() { // 处理校验成功的逻辑 // 例如,提交表单或跳转页面等操作 }, handleFailure() { // 处理校验失败的逻辑 // 例如,显示错误信息或清空表单等操作 }, handleError() { // 处理接口调用错误的逻辑 // 例如,显示错误信息或进行其他错误处理操作 }, }, }; </script> ``` 在上面的示例中,我们使用 `callAPI` 方法来模拟接口调用。在实际的代码中,你需要使用适当的方式(如 axios)来发送网络请求,并处理接口响应。在示例中,我们假设接口返回的数据是一个对象 `{ isValid: true }`。 根据接口返回的值,我们可以在 `then` 方法中进行判断。如果校验通过,就调用 `handleSuccess` 方法来处理成功的逻辑;如果校验失败,就调用 `handleFailure` 方法来处理失败的逻辑。如果接口调用出现错误,就调用 `catch` 方法中的 `handleError` 方法来处理错误。 你可以根据实际需求在 `handleSuccess`、`handleFailure` 和 `handleError` 方法中编写相应的逻辑。 希望这个示例能够帮助到你!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值