vue表单数据交互提交演示教程


Posted in Javascript onNovember 13, 2019

欢迎来到 vue-form 表单提交演示间, 你有更好的建议,请告知楼主额!

1. 客户端 html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <!-- 开发环境版本,包含了有帮助的命令行警告 -->
 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
 <!-- 生产环境版本,优化了尺寸和速度 -->
 <!--<script src="https://cdn.jsdelivr.net/npm/vue"></script>-->

 <!-- axios -->
 <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<div id="app">
 <h1>欢迎来到 vue-form 表单提交演示间, 你有更好的建议,请告知楼主额!</h1>
 <table class="table">
  <thead>
  <tr>
   <th>box</th>
   <th>new</th>
   <th>rank</th>
   <th>desc</th>
   <th>title</th>
  </tr>
  </thead>
  <tbody>
  <tr v-for="(v,i) in tabData">
   <td>{{v.box}}</td>
   <td>{{v.new}}</td>
   <td>{{v.rank}}</td>
   <td><input type="text" v-model="tabData[i]['desc']"></td>
   <td>{{v.title}}</td>
  </tr>
  </tbody>
 </table>
 <p>
  <button @click="submit" type="primary">提交</button>
 </p>
</div>

<script type="application/javascript">
 var app = new Vue({
  el: '#app',
  data: {
   tabData: [
    {
     "box": 21650000,
     "new": true,
     "rank": 1,
     "desc": 'desc1',
     "title": "Geostorm"
    },
    {
     "box": 13300000,
     "new": true,
     "rank": 2,
     "desc": 'desc2',
     "title": "Happy Death Day"
    }
   ],
   form: {
    firstName: 'Fred',
    lastName: 'Flintstone'
   }
  },
  methods: {
   submit: function () {
    /**
     * 多维数组对象降级为可供 axios 使用的form表单序列化数据
     **/
    function jsonData(arr) {
     let json = "";
     function fors(data, attr=false) {
      data = JSON.parse(JSON.stringify(data));
      for (let key in data) {
       if(Array.isArray(data[key]) || Object.prototype.toString.apply(data[key]) ==='[object Object]'){
        fors(data[key], true);
       } else {
        if(attr){
         json = json + '&'+ key + '[]' +'=' + data[key];
        }else {
         json = json + '&'+ key +'=' + data[key];
        }
       }
      }
     }
     fors(arr);
     return json;
    }
    console.log(jsonData(this.form));
    console.log('---------------');
    console.log(jsonData(this.tabData));
    console.log('---------------');

    // 提交用户数据
    axios({
     url: './index.php',
     method: 'post',
     data: jsonData(this.tabData),
     /**
      * 1. 如果后台可接受 application/json 方式提交数据 则:
      *  * 不需要 transformRequest 函数处理请求数据
      *  * 不需要 jsonData 函数对数据进行降维处理
      * 2. PHP 后台 可通过以下方式解析 application/json 数据
      *  * $form = file_get_contents('php://input');
      *  * $form = json_decode($form);
      *
      * 3. 当然:**楼主强烈建议**使用 application/json 方式提交数据。
      * 4. 如果大家觉得麻烦可以考虑使用 JQ了
      */
     transformRequest: [function (data) {
      // Do whatever you want to transform the data
      if(Array.isArray(data) || Object.prototype.toString.apply(data) ==='[object Object]'){
       let ret = '';
       for (let it in data) {
        ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
       }
       return ret
      } else {
       return data;
      }
     }],
     headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
     }
    }).then(function (res) {
     console.log('数据提交成功');
     console.log(res.data);
    })
   }
  }
 });
</script>
<style type="text/css">
 table{border-collapse: collapse;border: 1px solid red;}
 th,td{border: 1px solid red;}
</style>
</body>
</html>

2. 服务端,以PHP为例

<?php
header("Access-Control-Allow-Origin:*");
header('Access-Control-Allow-Headers:x-requested-with,content-type');

/**
 * 接收 x-www-form-urlencoded form表单提交数据
 */
echo json_encode($_REQUEST);

/**
 * 1. $GLOBALS ["HTTP_RAW_POST_DATA"];  需要配置服务器才可以使用
 * 2. file_get_contents('php://input');  无须配置即可使用
 *
 * 接收 application/json 提交数据
 */
$form = file_get_contents('php://input');
$form = json_decode($form);
print_r($form);

以上这篇vue表单数据交互提交演示教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS去掉第一个字符和最后一个字符的实现代码
Feb 20 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
Mar 27 Javascript
jquery获取tagName再进行判断
May 29 Javascript
js中this的用法实例分析
Jan 10 Javascript
jQuery判断数组是否包含了指定的元素
Mar 10 Javascript
jQuery实现美观的多级动画效果菜单代码
Sep 06 Javascript
jQuery div拖拽用法实例
Jan 14 Javascript
JavaScript的模块化开发框架Sea.js上手指南
May 12 Javascript
第一次接触神奇的Bootstrap菜单和导航
Aug 01 Javascript
jQuery延迟执行的实现方法
Dec 21 Javascript
JavaScript字符集编码与解码详谈
Feb 02 Javascript
浅谈angularjs中响应回车事件
Apr 24 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
Nov 13 #Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
Nov 13 #Javascript
基于vue-cli3和element实现登陆页面
Nov 13 #Javascript
vue data引入本地图片的两种方式小结
Nov 13 #Javascript
vue中的 $slot 获取插槽的节点实例
Nov 12 #Javascript
解决vue v-for src 图片路径问题 404
Nov 12 #Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
Nov 12 #Javascript
You might like
PHP 金额数字转换成英文
2010/05/06 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
理解Javascript闭包
2013/11/01 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
Python可跨平台实现获取按键的方法
2015/03/05 Python
python使用pil生成缩略图的方法
2015/03/26 Python
Python获取某一天是星期几的方法示例
2017/01/17 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
UNIX文件系统分类
2014/11/11 面试题
餐饮加盟计划书
2014/01/10 职场文书
2014全国两会心得体会
2014/03/17 职场文书
警校毕业生自我评价
2014/04/06 职场文书
2015年人事科工作总结
2015/04/28 职场文书
叶问观后感
2015/06/15 职场文书
小学运动会前导词
2015/07/20 职场文书
安全生产感想
2015/08/07 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
MYSQL如何查看进程和kill进程
2022/03/13 MySQL
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技