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获取RadioButtonList的Value/Text及选中值等信息实现代码
Mar 05 Javascript
鼠标悬停小图标显示大图标
Jan 22 Javascript
JS正则表达式比较常见用法
Jan 26 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
Sep 14 Javascript
深入理解jQuery.data() 的实现方式
Nov 30 Javascript
JavaScript实现定时页面跳转功能示例
Feb 14 Javascript
Vue数据双向绑定原理及简单实现方法
May 18 Javascript
vue如何引入sass全局变量
Jun 28 Javascript
js计算两个日期间的天数月的实例代码
Sep 20 Javascript
JS判断数组里是否有重复元素的方法小结
May 21 Javascript
layui实现给某一列加点击事件
Oct 26 Javascript
vue随机验证码组件的封装实现
Feb 19 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实现框架(二)
2006/10/09 PHP
?生?D片??C字串
2006/12/06 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
Python是编译运行的验证方法
2015/01/30 Python
轻松实现python搭建微信公众平台
2016/02/16 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
Django分页功能的实现代码详解
2019/07/29 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
速比涛英国官网:Speedo英国
2019/07/15 全球购物
求职简历自我评价范例
2014/03/12 职场文书
法制宣传月活动方案
2014/05/11 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
邀请函的格式
2015/01/30 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
OpenCV-Python实现油画效果的实例
2021/06/08 Python
Nginx的gzip相关介绍
2022/05/11 Servers