关灯
开启左侧

Vue axios 中提交表单数据(含上传文件)

[复制链接]
小川 发表于 2018-12-20 11:29:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3.   <head>
  4.     <title></title>
  5.     <meta charset="UTF-8">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1">
  7.   </head>
  8.   <body>
  9.     <form method="post" action="/upload" enctype="multipart/form-data">
  10.       <input type="text" name="name" value="" placeholder="请输入用户名">
  11.       <input type="text" name="age" value="" placeholder="请输入年龄">
  12.       <input type="file" name="uploadFile">
  13.       <input type="submit" value="提交">
  14.     </form>
  15.   </body>
  16. </html>
复制代码

这种方式可以提交,那么问题来了,表单提交以后如果需要获取服务器的响应呢,如果需要在响应成功后跳转页面呢,这种方式显得不好处理.

切回正题,在vue中这种简单的表单提交如何处理呢,其实使用的是 FormData 来模拟表单提交

  1. <head>
  2.   <title></title>
  3.   <meta charset="UTF-8">
  4.   <meta name="viewport" content="width=device-width, initial-scale=1">
  5.   <script src="https://cdn.bootcss.com/vue/2.3.4/vue.js"></script>
  6.   <script src="https://cdn.bootcss.com/axios/0.16.2/axios.js"></script>
  7. </head>

  8. <body>
  9.   <form>
  10.     <input type="text" value="" v-model="name" placeholder="请输入用户名">
  11.     <input type="text" value="" v-model="age" placeholder="请输入年龄">
  12.     <input type="file" @change="getFile($event)">
  13.     <button @click="submitForm($event)">提交</button>
  14.   </form>

  15.   <script>
  16.     window.onload = function () {
  17.       Vue.prototype.$http = axios;
  18.       new Vue({
  19.         el: 'form',
  20.         data: {
  21.           name: '',
  22.           age: '',
  23.           file: ''
  24.         },
  25.         methods: {
  26.           getFile(event) {
  27.             this.file = event.target.files[0];
  28.             console.log(this.file);
  29.           },
  30.           submitForm(event) {
  31.             event.preventDefault();
  32.             let formData = new FormData();
  33.             formData.append('name', this.name);
  34.             formData.append('age', this.age);
  35.             formData.append('file', this.file);

  36.             let config = {
  37.               headers: {
  38.                 'Content-Type': 'multipart/form-data'
  39.               }
  40.             }

  41.             this.$http.post('/upload', formData, config).then(function (res) {
  42.               if (res.status === 2000) {
  43.                 /*这里做处理*/
  44.               }
  45.             })
  46.           }
  47.         }
  48.       })
  49.     }
  50.   </script>
  51. </body>

  52. </html>
复制代码


 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 最佳新人

    注册账号后积极发帖的会员

1关注

1粉丝

114帖子

排行榜
关闭

站长推荐上一条 /1 下一条

官方微信

全国服务热线:

400-9988-316

公司地址:国家西部信息安全产业基地(成都市高新区云华路333号)

邮编:610000    Email:2908503813@qq.com

Copyright   ©2015-2016  EOIT论坛Powered by©Discuz!    ( 蜀ICP备11000634号-7 )