天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了。其实这篇文章里的demo是接着(天河微信小程序入门《三》)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来。放到今天来看,从前台提交数据到数据库已经是没有什么可写的了。不过既然开篇了就不能太监么,所以还是分享出来给大家。
我当时的目的是为了实验api的功能和跟后台数据的通讯存储,所以没有考虑到美观之类的,界面非常丑请大家包涵。
一个带form表单的页面
在这里定义好自己form表单的元素名称
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
< view class = "page" > < view class = "page__hd" > < text >表单提交</ text > </ view > < form class = "page__bd" catchsubmit = "formSubmit" catchreset = "formReset" > < view class = "section" > < input name = "name" placeholder = "姓名" auto-focus/> </ view > < view class = "section" > < input name = "age" type = "number" placeholder = "年龄" /> </ view > < view class = "section section_gap" > < view class = "section__title" >性别</ view > < radio-group name = "gender" > < label >< radio value = "MAN" />MAN</ label > < label >< radio value = "WOMAN" />WOMAN</ label > </ radio-group > </ view > < view class = "btn-area" > < button formType = "submit" >提交</ button > < button formType = "reset" >重置</ button > </ view > < view class = "page__hd" wx:if = "{{error}}" > < text >{{error}}</ text > </ view > </ form > |
然后调用wx.request的API方法将表单提交到后台
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
Page({ data: { pickerHidden: true , chosen: '' }, pickerConfirm: function (e) { this .setData({ pickerHidden: true }) this .setData({ chosen: e.detail.value }) }, pickerCancel: function (e) { this .setData({ pickerHidden: true }) }, pickerShow: function (e) { this .setData({ pickerHidden: false }) }, formSubmit: function (e) { var _this = this /********************* wx.redirectTo({ url:'create_photo' }) **********************/ wx.request({ data: { name: e.detail.value.name, age: e.detail.value.age, gender: e.detail.value.gender } , method: 'POST' , // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT header: { 'content-type' : 'application/x-www-form-urlencoded; charset=UTF-8' }, success: function (res){ var err = res.data.error if (err) { _this.setData({ error:err }) } else { wx.redirectTo({ url: 'create_photo' }) } }, fail: function () { // fail }, complete: function () { // complete } }) }, formReset: function (e) { console.log( 'form发生了reset事件,携带数据为:' , e.detail.value) this .setData({ chosen: '' }) } }) |
这里需要提到几个坑,首先是你所有的js和json文件,如果创建了,里面一定要有内容,哪怕json文件就是一对花括号
{}
哪怕js文件就只有一个Page
Page({})
都必须有。如果你没有,微信的开发工具是不会报错的。但是在加载的时候,这里其实已经出错了,这些空文件后面的文件统统都没有加载进去。结果导致你后面再写任何代码都是该文件不存在或者该方法不存在。这里要感谢 @leochen帮我找到的这个bug,解决了我的按钮提交无效。
ok我们来看看效果:
这是输入界面,然后我在微信开发工具的调试界面看form提交的格式
我们可以看到提交的内容是
- name:
微信小程序联盟 - age:
18 - gender:
MAN
提交的head是
- content-type:
application/x-www-form-urlencoded; charset=UTF-8
因为这两个值都是我们在代码中写的。
这里需要说明一下,head并不是必须的,微信默认的content-type是application/json,但是我的后台框架配置必须是x-www-form-urlencoded格式才接收,所以这里跟微信官方的文档不同,而charset=UTF-8是一种习惯问题,告诉后台编码格式,这样更规范。
闲话少说,我们看看后台的断点
看来我们的req已经成功的接收到了前台传过来的表单,然后我一个个的放入我的对象中。最后调用mybatis存入数据库
这就是我存入数据库的数据。这样一个完整的表单提交录入就完成了。
虽然这个功能很简单,但是因为微信提供的后台请求方式是自己封装的,所以可能还是会有一些刚入门的前端朋友不习惯,毕竟是第一次使用嘛,总想试一试是否能够成功录入数据库。所以我才写了这样一个简单的demo。
完整的demo我这里就不上传了,因为没有后台的服务和数据库,下了也用不了。我考虑后面是不是可以做成一个简单的api,然后再把查询也做了,这样大家就可以提交之后看到效果了,那个时候再把完整的demo分享出来供大家参考。
以下是建库脚本,如果有能力的后端猿们也可以帮我把这件事情做了,分享给大家,毕竟众人拾柴火焰高嘛!
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
-- ================================================== -- formDemo信息表 -- ================================================== DROP TABLE IF EXISTS d_form; CREATE TABLE d_form ( id CHAR (32) NOT NULL COMMENT 'ID序列号' , name VARCHAR (32) NOT NULL COMMENT '用户名' , age INT NOT NULL DEFAULT 0 COMMENT '年龄' , gender CHAR (32) NOT NULL DEFAULT 'DEFAULT' COMMENT '性别' , cre_tim TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间' , upd_tim DATETIME COMMENT '更新时间' , remark VARCHAR (128) COMMENT '备注' , PRIMARY KEY (id) ) COMMENT= 'formDemo信息表' ENGINE=InnoDB; CREATE UNIQUE INDEX uniq_idx_form_name ON d_form ( name ); |
天河微信小程序入门《四》:融会贯通,form表单提交数据库的更多相关文章
- 微信小程序开发4之form表单与弹出层
第一 表单的提交和重置 第二 radio组件 第三 checkbox组件 第四 loading组件 第五 toast组件 第六 modal组件
- 天河微信小程序入门《三》:打通任督二脉,前后台互通
原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https ...
- 天河微信小程序入门:阿里云tomcat免费配置https
天河君在第一时间通过了微信小程序验证,开启了我的微信小程序之旅.因为天河君之前是一名后端狗,对前端不是很了解,所以几乎可以认为是从零开始学做微信小程序.也希望有志在微信小程序方向做点事情的朋友能够和我 ...
- 微信小程序入门一: 简易form、本地存储
实例内容 登陆界面 处理登陆表单数据 处理登陆表单数据(异步) 清除本地数据 实例一: 登陆界面 在app.json中添加登陆页面pages/login/login,并设置为入口. 保存后,自动生成相 ...
- 微信小程序入门四: 导航栏样式、tabBar导航栏
实例内容 导航栏样式设置 tabBar导航栏 实例一:导航栏样式设置 小程序的导航栏样式在app.json中定义. 这里设置导航,背景黑色,文字白色,文字内容测试小程序 app.json内容: { & ...
- Form表单提交数据的几种方式
一.submit提交 在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮(<input type='submit'>)就可以进行数据的提交, ...
- 微信小程序入门基础
微信小程序入门基础 视频教程(https://edu.csdn.net/course/detail/8456?pre_view=1) 第一章.认识小程序 1.工具的下载与安装 2.小程序代码构成 ...
- 微信小程序入门篇
微信小程序入门篇: 准备工作 IDE搭建 就不多说了,没有内测码去下载个破解版吧,我用了一下,学习完全够了!IDE破解版+安装教程 图片发自简书App 知识准备 JavaScrip还是要看看的,推荐教 ...
- 从零开始的微信小程序入门教程(一)
之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践整理出一个较为入门且不是很厚的教程, ...
随机推荐
- HashMap
HashMap的定义 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, ...
- IOS实现自动循环滚动广告--ScrollView的优化和封装
一.问题分析 在许多App中,我们都会见到循环滚动的视图,比如广告,其实想实现这个功能并不难,用ScrollView就可以轻松完成,但是在制作的过程中还存在几个小问题,如果能够正确的处理好这些小问题, ...
- mysql 多版本并发控制
查看事务隔离级别 SHOW VARIABLES LIKE "%iso%" MVCC 通过给每张表多加两个隐藏列来实现,一个保存了行的创建时间,一个保存了行的过期时间(或删除时间), ...
- 千万级高并发负载均衡软件HAproxy
1负载均衡产品介绍 基于硬件的负载均衡设备例如F5,Big-IP,基于软件的负载均衡产品HAproxy,LVS,nginx在这些软件产品中,又分为基于操作系统的软负载实现和基于第三方应用的软负载实现. ...
- form 表单基础知识
<form method=" name="one" action="http://www.battlenet.com.cn/zh/"> & ...
- ssh 登录慢?
修改 /etc/ssh/sshd_config 文件中对应的配置为: GSSAPIAuthentication no UseDNS=no 修改 /etc/nsswitch.conf 文件中对应的配置为 ...
- 记录在linux下的wine生活
记录在linux下的windows生活 本篇内容涉及QQ.微信.Office的安装配置 QQ: 到deepin下载轻聊版. 如果安装了crossover,那么将其中opt/cxoffice/suppo ...
- Linux可信计算机制模块详细分析之核心文件分析(8)tpm.c核心代码注释(中)
/*设置TPM命令格式*/ ssize_t tpm_getcap(struct device *dev, __be32 subcap_id, cap_t *cap, const char *desc) ...
- keylogger
import pyHookimport sysimport pythoncomimport loggingfile_log = 'C:\\important\\log.txt'def OnKeyboa ...
- File 类
File 类:文件和目录(文件夹)路径名的抽象表现形式. 方法 1.创建功能 public boolean createNewFile():创建文件 public boolean mkdir():创建 ...