zoukankan      html  css  js  c++  java
  • 微信小程序form表单提交到数据库

    1.小程序目录图

    1. js文件是逻辑控制,主要是它发送请求和接收数据,
    2. json 用于此页面局部 配置并且覆盖全局app.json配置,
    3. wxss用于页面的样式设置,
    4. wxml就是页面,相当于html

    2.Wxml文件代码

    <form bindsubmit="formSubmit" bindreset="formReset">

      <view class="section">
        <view class="section__title">姓名</view>
        <input name="xingming" placeholder="请输入姓名" />
      </view>
      <view class="section section_gap">
        <view class="section__title">性别</view>
        <radio-group name="xingbie">
          <label><radio value="男"/>男</label>
          <label><radio value="女"/>女</label>
        </radio-group>
      </view>
      <view class="section section_gap">
        <view class="section__title">爱好</view>
        <checkbox-group name="aihao">
          <label><checkbox value="旅游"/>旅游</label>
          <label><checkbox value="看书"/>看书</label>
          <label><checkbox value="电动"/>电动</label>
          <label><checkbox value="篮球"/>篮球</label>
        </checkbox-group>
      </view>
      <view class="btn-area">
        <button formType="submit">提交</button>
        <button formType="reset">重置</button>
      </view>
    </form>

    ******重点

    A.Form表单,需要绑定一个submit事件,在小程序中,属性为bindsubmit,

    bindsubmit=”formSubmit”   这里的属性值formSubmit,命名可以为符合规范的任意值,相当于以前html中的  οnsubmit=”formSubmit()”,是一个函数名,当提交的时候触发formSubmit这个函数事件,这个函数写在js中。

    B.其他的属性和之前的HTML差不多,注意的是,表单一定要有name=“value”,后端处理和以前一样,比如name=”username” PHP可以用 $_POST[‘username']来接收。

    C.由于小程序没有input submit这个按钮,所以在每个form表单中都要有一个提交按钮,

    <button formType="submit">提交</button>,这个按钮就是用来开启提交事件的。

    3.js代码

    1.  
      //index.js
    2.  
      //获取应用实例
    3.  
      const app = getApp()
    4.  
      Page({
    5.  
      data: {
    6.  
      },
    7.  
      formSubmit: function (e) {
    8.  
      //console.log(e.detail.value);
    9.  
      if (e.detail.value.xingming.length == 0 || e.detail.value.xingming.length >= 8) {
    10.  
      wx.showToast({
    11.  
      title: '姓名不能为空或过长!',
    12.  
      icon: 'loading',
    13.  
      duration: 1500
    14.  
      })
    15.  
      setTimeout(function () {
    16.  
      wx.hideToast()
    17.  
      }, 2000)
    18.  
      } else if (e.detail.value.xingbie.length == 0) {
    19.  
      wx.showToast({
    20.  
      title: '性别不能为空!',
    21.  
      icon: 'loading',
    22.  
      duration: 1500
    23.  
      })
    24.  
      setTimeout(function () {
    25.  
      wx.hideToast()
    26.  
      }, 2000)
    27.  
      } else if (e.detail.value.aihao.length == 0) {
    28.  
      wx.showToast({
    29.  
      title: '爱好不能为空!',
    30.  
      icon: 'loading',
    31.  
      duration: 1500
    32.  
      })
    33.  
      setTimeout(function () {
    34.  
      wx.hideToast()
    35.  
      }, 2000)
    36.  
      } else {
    37.  
      wx.request({
    38.  
      url: '接口路径',
    39.  
      header: {
    40.  
      "Content-Type": "application/x-www-form-urlencoded"
    41.  
      },
    42.  
      method: "POST",
    43.  
      data: { xingming: e.detail.value.xingming, xingbie: e.detail.value.xingbie, aihao: e.detail.value.aihao },
    44.  
      success: function (res) {
    45.  
      console.log(res.data);
    46.  
      if (res.data.status == 0) {
    47.  
      wx.showToast({
    48.  
      title: '提交失败!!!',
    49.  
      icon: 'loading',
    50.  
      duration: 1500
    51.  
      })
    52.  
      } else {
    53.  
      wx.showToast({
    54.  
      title: '提交成功!!!',//这里打印出登录成功
    55.  
      icon: 'success',
    56.  
      duration: 1000
    57.  
      })
    58.  
      }
    59.  
      }
    60.  
      })
    61.  
      }
    62.  
      },
    63.  
      })

    ******js中需要注意的是

    Page()这个方法是必须有的,里面放置js对象,用于页面加载的时候,呈现效果

    data: {},数据对象,设置页面中的数据,前端可以通过读取这个对象里面的数据来显示出来。

    formSubmit: function 小程序中方法都是 方法名:function(),其中function可以传入一个参数,作为触发当前时间

    (这里的e,就是当前触发事件的对象,类似于html οnclick=“foo(this)”this对象,小程序封装了许多内置的调用方法,

    e.detail.value.xingming就是当前对象name=”xingming”的对象的值, e.detail.value.xingming.length就是这

    个值的长度 showToast类似于JS中的alert,弹出框,title  是弹出框的显示的信息,icon是弹出框的图标状态,目前

    只有loading 和success这两个状态。duration是弹出框在屏幕上显示的时间。)

    重点来了


          wx.request({
            url: '接口路径',
            header: {
              "Content-Type": "application/x-www-form-urlencoded"
            },
            method: "POST",
            data: { xingming: e.detail.value.xingming, xingbie: e.detail.value.xingbie, aihao: e.detail.value.aihao },
            success: function (res) {
              console.log(res.data);
              if (res.data.status == 0) {
                wx.showToast({
                  title: '提交失败!!!',
                  icon: 'loading',
                  duration: 1500
                })
              } else {
                wx.showToast({
                  title: '提交成功!!!',//这里打印出登录成功
                  icon: 'success',
                  duration: 1000
                })
              }
            }

    wx.request({})是小程序发起https请求,注意http是不行的。

    wx.request({})是小程序发起https请求,注意http是不行的。

    这里

    A.url是你请求的网址,比如以前在前端,POST表单中action=‘index.php',这里的index.php是相对路径,而小程序

    请求的网址必须是网络绝对路径。比如:https://www.xxxxxcom/wx/form.php

    B.

    header: { 
     
       "Content-Type": "application/x-www-form-urlencoded"
     
      },
    由于POST和GET传送数据的方式不一样,POST的header必须是

    "Content-Type": "application/x-www-form-urlencoded"  
    GET的header可以是 'Accept': 'application/json'

    C.一定要写明method:“POST”  默认是“GET”,保持大写

    data:{xingming:e.detail.value.xingming,xingbie:e.detail.value.xingbie,aihao:e.detail.value.aihao},
    这里的data就是POST给服务器端的数据 以{name:value}的形式传送

    D.成功回调函数

         success: function (res) {
             // console.log(res.data);
              if (res.data.status == 0) {

                wx.showToast({

                  title: '提交失败!!!',

                  icon: 'loading',

                  duration: 1500

                })

              } else {

                wx.showToast({

                  title: '提交成功!!!',

                  icon: 'success',

                  duration: 1000

                })

            }

            }
    E.success:function()是请求状态成功触发是事件,也就是200的时候,注意,请求成功不是操作成功,请求只是这个

    程序到服务器端这条线的通的。

    F.  if (res.data.status == 0) {

      wx.showToast({

                  title: '提交失败!!!',

                  icon: 'loading',

                  duration: 1500

                  })

              } 

    加一条,单独写的事件也是也可的。具体问题具体对待

    1.  
      saveEvaluate:function (e){
    2.  
      let that = this;
    3.  
      let answerPaths = this.data.listData.studentQuestionList[this.data.m].answerPaths;
    4.  
      let studentId = this.data.listData.studentQuestionList[this.data.m].studentId;
    5.  
      request.post({
    6.  
      url: 接口名称,
    7.  
      data: {
    8.  
      photoId: this.data.detail.homeworkId,
    9.  
      userId: studentId,
    10.  
      photoRemark: e.detail.value.photoRemark,
    11.  
      photoScore: e.detail.value.photoScore,
    12.  
      answerPaths: answerPaths,
    13.  
      access_token: app.getToken()
    14.  
      }
    15.  
      }).then(res => {
    16.  
      if (res.data.code == 200) {
    17.  
      that.setData({
    18.  
      studentList: that.data.studentList,
    19.  
      completeStudentList: that.data.completeStudentList
    20.  
      })
    21.  
      //刷新弹框页面数据
    22.  
      wx.navigateTo({
    23.  
      url: '/pages/xxx/xxx/xxx',
    24.  
      })
    25.  
      }
    26.  
      })
    27.  
      }

    学习链接:https://blog.csdn.net/wydd7522/article/details/80724526

  • 相关阅读:
    C#学习记录二:高级数据存储方式
    SharePoint 2010 匿名用户调用Client Object Model访问列表项
    Android 在闹钟开机时,如何解决开机动画没有播完就进入Launcher M
    Getting in Line UVA 216
    Android 如何关闭Navigation Bar M
    google protocol buffer 简介 版本 安装 使用 实例
    Android [VP]视频播放器播放本地视频时收到短信/彩信,需要界面提示 M
    Maven教程初级篇02:pom.xml配置初步
    当Ruby的model名字出错时,在现实view时显示错误的提示
    VS Code 安装 C++ 调试环境
  • 原文地址:https://www.cnblogs.com/ranju/p/14078030.html
Copyright © 2011-2022 走看看