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 相关文章推荐
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
Aug 13 Javascript
javascript入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
基于jQuery的仿flash的广告轮播
Nov 05 Javascript
jquery学习笔记 用jquery实现无刷新登录
Aug 08 Javascript
JavaScript插入动态样式实现代码
Feb 22 Javascript
简单实用jquery版三级联动select示例
Jul 04 Javascript
JS 按钮点击触发(兼容IE、火狐)
Aug 07 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
Aug 07 Javascript
js加载读取内容及显示与隐藏div示例
Feb 13 Javascript
jQuery的cookie插件实现保存用户登陆信息
Apr 15 Javascript
JavaScript对象引用与赋值实例详解
Mar 15 Javascript
详解如何使用router-link对象方式传递参数?
May 02 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判断字符以及字符串的包含方法属性
2008/08/30 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
python实现简单ftp客户端的方法
2015/06/28 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
python实现八大排序算法(1)
2017/09/14 Python
Python元字符的用法实例解析
2018/01/17 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
对Django url的几种使用方式详解
2019/08/06 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
公司行政经理岗位职责
2013/12/24 职场文书
面试后感谢信
2014/02/01 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
企业安全生产承诺书
2014/05/22 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
大学生实习证明范本
2014/09/19 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL