axios模拟表单提交

本文介绍了如何在前端使用axios以application/x-www-form-urlencoded方式提交数据,以及后端Controller如何直接接收并处理这种形式的表单数据,包括使用Element-Plus组件和SpringBoot的@PostMapping处理示例。

axios默认是application/json方式提交,controller接收的时候必须以@RequestBody的方式接收,有时候不太方便。如果axios以application/x-www-form-urlencoded方式提交数据,controller接收的时候只要保证名字应对类型正确即可。

前端代码:

  <el-dialog
      v-model="dialogVisible" width="30%"
  >
    <el-form :model="formData" label-position="top">
      <el-form-item label="用户名">
        <el-input v-model="formData.username" placeholder="用户名..."/>
      </el-form-item>
      <el-form-item label="密码">
        <el-input type="password" v-model="formData.password" placeholder="密码..."/>
      </el-form-item>
    </el-form>
    <template v-slot:header>
      <span>登录窗口</span>
    </template>
    <template #footer>
      <span class="dialog-footer">
        <el-button type="primary" @click="formConfirm">
          登录
        </el-button>
      </span>
    </template>
  </el-dialog>
在Vue 3项目中使用`axios`发送表单数据的方式与其他基于JavaScript的HTTP库类似,通常我们会通过设置请求头以及正确构造表单项来进行传输。下面将详细介绍如何利用`axios`以表单的形式传递参数。 ### 使用FormData对象 当涉及到文件上传或需模拟HTML `<form>` 表单提交时,最推荐的做法就是采用 `FormData` 对象来封装需要传送的数据: ```javascript import axios from 'axios'; // 创建 FormData 实例并添加字段值 const formData = new FormData(); formData.append('username', this.username); // 假设this指向当前组件实例,并存在对应的data属性 formData.append('password', this.password); axios.post('/api/login', formData, { headers: { 'Content-Type': 'multipart/form-data' // 确保服务器端能识别出这是一个表单内容类型的请求 } }) .then(response => console.log(response.data)) .catch(error => console.error("There was an error!", error)); ``` #### URLSearchParams 方式 (适用于简单的键值对) 如果只是想发送普通的键值对而不涉及复杂结构如数组、嵌套对象等,则可以考虑直接构建查询字符串或者使用浏览器内置的URLSearchParams API: ```javascript import axios from 'axios'; const params = new URLSearchParams({ username: this.username, password: this.password, }); axios.post('/api/login', params) .then(/* ... */); ``` 需要注意的是,在这种情况下,默认的内容类型应为 `'application/x-www-form-urlencoded;charset=UTF-8'`. > **注意**: 如果你在使用某些特定版本以上的axios可能会默认自动处理简单key-value形式的object作为post body而无需显式转换成query string;但对于更复杂的场景还是建议按照上述方式进行编码。 对于这两种方式的选择取决于你要发送的具体信息种类——如果你的应用程序主要是关于文本输入和其他非二进制数据的操作,那么选择第二种会比较方便;但如果涉及到图像或其他大型媒体文件,则应该优先选用第一种方案即`FormData`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值