详解微信小程序中增、删、改、查操作实例代码
这篇文章主要介绍了微信小程序 增、删、改、查操作实例详解的相关资料,这里附有实例代码,需要的朋友可以参考下
微信小程序 增、删、改、查操作实例详解
1.以收货地址的增删改查为例
2.文件目录
js文件是逻辑控制,主要是它发送请求和接收数据,
json 用于此页面局部 配置并且覆盖全局app.json配置,
wxss用于页面的样式设置,
wxml就是页面,相当于html
<form bindsubmit="addSubmit"> <view class="consignee"> <text class="consignee-tit">收货人信息</text> <view class="consignee-main"> <view class="flex flex-align-center flex-pack-justify"> <text>姓名</text> <input class="flex-1" name="name" type="number" maxlength="11" placeholder="请输入收货人姓名" /> </view> <view class="flex flex-align-center flex-pack-justify"> <text>电话</text> <input class="flex-1" name="mobile" type="number" maxlength="11" placeholder="请输入手机号" /> </view> <view class="flex flex-align-center flex-pack-justify"> <text>地址</text> <input class="flex-1" name="address" type="text" maxlength="11" placeholder="请输入地址" /> </view> </view> </view> <view class="delivery-time flex flex-align-center flex-pack-justify"> <text>送货时间</text> <picker mode="date"></picker> </view> <view class="receipt-address"> <view class="receipt-address-tit">收货地址信息</view> <view wx:for="{{addressInfo}}" wx:key="unique"> <view class="receipt-address-list clearfix"> <image src="../../images/address-icon.png"></image> <view class="address-list-main"> <view class="clearfix"><text>收货地址{{item.address}}</text><text>1km</text></view> <view class="address-info">收货人{{item.name}}</view> <view class="address-time">收货人电话{{item.mobile}}</view> <view data-deleteid="{{item.id}}" bindtap="deleteClick">删除</view> <view data-editid="{{item.id}}" bindtap="editClick">编辑</view> </view> </view> </view> </view> <view class="receipt-true"> <button class="btn_login" formType="submit">保存</button> </view> </form>
前端页面主要展示一个表单和已有收货人信息
1.其中几个关键点需要理解
a.Form表单,需要绑定一个submit事件,在小程序中,属性为bindsubmit,
bindsubmit=”formSubmit” 这里的属性值formSubmit,命名可以为符合规范的任意值,相当于以前html中的 onsubmit=”formSubmit()”,是一个函数名,当提交的时候触发formSubmit这个函数事件,这个函数写在js中。
b.其他的属性和之前的HTML差不多,注意的是,表单一定要有name=“value”,后端处理和以前一样,比如name=”username” PHP可以用 $_POST[‘username']来接收。
c.由于小程序没有input submit这个按钮,所以在每个form表单中都要有一个提交按钮,
,这个按钮就是用来开启提交事件的。
至于循环,拆开解
d.小程序给我们一个封装好的方法onLoad: function(),当页面加载的时候,调用这个方法。
var app = getApp() Page({ data:{}, onLoad: function() { var that = this; //收货地址首页 wx.request({ //缺少用户唯一标识,现在的在服务器的控制器里有一个假id = 2 url: 'https://shop.yunapply.com/home/shipping/index', method: 'GET', data: {}, header: { 'Accept': 'application/json' }, success: function(res) { that.setData({ "addressInfo": res.data.info, }) console.log(res.data.info); }, fail:function(){ wx.showToast({ title: '服务器网络错误!', icon: 'loading', duration: 1500 }) } }) } })
查
收货地址的首页,用于拉取当前用户已有的收货地址
var that = this;
不知道为什么要这样做,可能是为了避免this 冲突或者语意不明确,将当前的对象,赋值给变量that
wx.request({})发起https请求
url: 'https://shop.com/home/shipping/index',所需要请求的网址接口
method: 'GET',请求的方式,默认是GET,当时POST的时候,必须声明
data: {},发送的请求的数据
header: {},发送的头信息,
GET方式的头信息为:'Accept': 'application/json'
POST方式的头信息为:"Content-Type": "application/x-www-form-urlencoded"
success:function() 请求成功调用的方法
Fail:function() 请求失败调用的方法
success: function(res) { that.setData({ "addressInfo": res.data.info, }) },
res为调用成功以后服务器端返回的数据,
that.setData({"addressInfo": res.data.info,}) 添加数据到当前页面的data对象,键名为addressInfo,键值是返回的数据,我需要的是res的data对象的info对象的所有信息
fail:function(){ wx.showToast({ title: '服务器网络错误!', icon: 'loading', duration: 1500 }) }
网络请求失败调用的方法
showToast类似于JS中的alert,弹出框,title 是弹出框的显示的信息,icon是弹出框的图标状态,目前只有loading 和success这两个状态。duration是弹出框在屏幕上显示的时间。
a.url是你请求的网址,比如以前在前端,POST表单中action=‘index.php',这里的index.php是相对路径,而小程序请求的网址必须是网络绝对路径。
b.'https://shop.yunapply.com/home/shipping/index',以GET方式请求HOME模块下的Shipping控制下的index方法
c.将得到的值添加到data里
看HOME模块下的Shipping控制下的index方法
public function index() { //$id 为用户名id 等以后可以通过token获取或者session(id)什么的 $use_id = 2; $res = D('Shipping')->getAddress($use_id); if ($res == false){ $this->error('暂无收货地址','',true); }else{ $this->success($res,'',true); } }
查看Shipping模型中的getAddress()方法
/** * 获取收货地址信息 * @param $id 当前用户id * @return 属于用户的所有地址 */ public function getAddress($id) { $address_list = $this->where(array('user_id'=>$id))->select(); if ($address_list == false){ return false; } return $address_list; }
这样就根据用户是否有地址还返回相应的JSON数据
本例子的JSON数据是
{"info":[{"id":"4","user_id":"2","name":"addTest","mobile":"15162550544","province":"", "city":"","district":"","address":"44563","createtime":"2017-01-10 18:45:27" ,"modifytime":"2017-01-10 18:45:27","default":"0"}],"status":1,"url":""}
请求成功以后就将JSON添加到data{}中,并设置键值为addressInfo
那么接下来就是将这些信息展示在前端页面上
<view wx:for="{{addressInfo}}" wx:key="unique"> <view class="receipt-address-list clearfix"> <image src="../../images/address-icon.png"></image> <view class="address-list-main"> <view class="clearfix"><text>收货地址{{item.address}}</text><text>1km</text></view> <view class="address-info">收货人{{item.name}}</view> <view class="address-time">收货人电话{{item.mobile}}</view> <view data-deleteid="{{item.id}}" bindtap="deleteClick">删除</view> <view data-editid="{{item.id}}" bindtap="editClick">编辑</view> </view> </view> </view>
控制属性 wx:for 绑定一个数组,就是JS中的addressInfo这个数组,默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item 。可以根据{{item.address}}、{{item.name}}、{{item.mobile}}、{{item.id}}获取到当前数据的地址、收货人、电话和该条信息的id
循环之后就可以按照格式展示所有地址信息了,相当于TP模板中的foreach
删
在前台模板的循环数据里可以看到这样一条标签
event.currentTarget.dataset.deleteid;表示事件对象的目标的data-*的值
bindtap属性是微信在模板页中绑定点击事件,deleteClick为触发时间的方法名
在index.js中,删除代码如下:
//删除地址 deleteClick:function(event){ var id = event.currentTarget.dataset.deleteid; wx.request({ url: 'https://shop.yunapply.com/home/shipping/delAddress?id='+id, data: {}, method: 'GET', success: function(res){ if(res.data.status == 0){ wx.showToast({ title: res.data.info, icon: 'loading', duration: 1500 }) }else{ wx.showToast({ title: res.data.info, icon: 'success', duration: 1000 }) //删除之后应该有一个刷新页面的效果,等和其他页面刷新跳转一起做 } }, fail:function(){ wx.showToast({ title: '服务器网络错误!', icon: 'loading', duration: 1500 }) } }) }
点击前端删除按钮的时候,触发deleteClick事件,可以传入一个参数,代表事件对象。
event.currentTarget.dataset.deleteid;表示事件对象的目标的data-*的值
然后通过GET方式传入url,在服务器端删除功能如下
public function delAddress($id) { $res = D('Shipping')->where(array('id'=>$id))->delete(); if ($res){ $this->success('删除成功','',true); }else{ $this->error('删除失败','',true); } }
根据返回的JSON值就可以提示删除成功与否
增、改
之前觉得增加和修改会和表单提交一样简单,但是做了一些还是觉得不一样,好好在写一遍。
首先查看前台表单
<form bindsubmit="addSubmit"> <view class="consignee"> <text class="consignee-tit">收货人信息</text> <view class="consignee-main"> <input name="id" type="hidden" value="{{addressEdit.id}}" /> <view class="flex flex-align-center flex-pack-justify"> <text>姓名</text> <input class="flex-1" name="name" type="number" value="{{addressEdit.name}}" maxlength="11" placeholder="请输入收货人姓名" /> </view> <view class="flex flex-align-center flex-pack-justify"> <text>电话</text> <input class="flex-1" name="mobile" type="number" value="{{addressEdit.mobile}}" maxlength="11" placeholder="请输入手机号" /> </view> <view class="flex flex-align-center flex-pack-justify"> <text>地址</text> <input class="flex-1" name="address" type="text" value="{{addressEdit.address}}" maxlength="-1" placeholder="请输入地址" /> </view> </view> </view> <view wx:for="{{addressInfo}}" wx:key="unique"> <view class="receipt-address-list clearfix"> <image src="../../images/address-icon.png"></image> <view class="address-list-main"> <view class="clearfix"><text>收货地址{{item.address}}</text><text>1km</text></view> <view class="address-info">收货人{{item.name}}</view> <view class="address-time">收货人电话{{item.mobile}}</view> <view data-deleteid="{{item.id}}" bindtap="deleteClick">删除</view> <view data-editid="{{item.id}}" bindtap="editClick">编辑</view> <view class="receipt-true"> <button class="btn_login" formType="submit">保存</button> </view> </form>
a.Form表单,需要绑定一个submit事件,在小程序中,属性为bindsubmit,
bindsubmit=”formSubmit” 这里的属性值formSubmit,命名可以为符合规范的任意值,相当于以前html中的 onsubmit=”formSubmit()”,是一个函数名,当提交的时候触发formSubmit这个函数事件,这个函数写在js中。
b.其他的属性和之前的HTML差不多,注意的是,表单一定要有name=“value”,后端处理和以前一样,比如name=”username” PHP可以用 $_POST[‘username']来接收。
c.由于小程序没有input submit这个按钮,所以在每个form表单中都要有一个提交按钮,
,这个按钮就是用来开启提交事件的。
d.由于添加地址和编辑地址都是在一个页面的,所以我需要在每个表单中,加一个默认值变量,当点击修改的时候,默认值就显示在输入框中。
e.表单中有一个编辑,绑定了事件editClick,当点击这个按钮的时候,就会进入编辑模式
添加和修改的放在一个函数里面,但是修改数据的显示是另外一个函数
先说修改,点点击编辑的时候,触发editClick事件
JS如下:
editClick:function(event){ var that = this; var id = event.currentTarget.dataset.editid; wx.request({ url: 'https://shop.yunapply.com/home/shipping/edit?id='+id, data: {}, method: 'GET', success: function(res){ if(res.data.status == 0){ wx.showToast({ title: res.data.info, icon: 'loading', duration: 1500 }) }else{ that.setData({ "addressEdit": res.data.info, }) } }, fail:function(){ wx.showToast({ title: '服务器网络错误!', icon: 'loading', duration: 1500 }) } }) },
为了更好理解,贴个图
最下面有一个保存按钮,当点击编辑的时候,触发editClick:function(event),这个event是当前触发事件的对象,
var id = event.currentTarget.dataset.editid; 就是获取当前事件对象的dataset中的editid的值,这里id是当前地址的id
url: 'https://shop.com/home/shipping/edit?id='+id
Wx.request 的url,将id值放在url上,作为GET参数,传递到服务器。
data: {},是需要额外传递的数据
method: 'GET', 是数据传递方式 默认是“GET”,保持大写
data:{mobile:e.detail.value.mobile,password:e.detail.value.password},
这里的data就是POST给服务器端的数据 以{name:value}的形式传送
success:function()是请求状态成功触发是事件,也就是200的时候,注意,请求成功不是操作成功,请求只是这个程序到服务器端这条线的通的。
fail:function()就是网络请求不成功,触发的事件。
这里的一段代码是和PHP后端程序有关系的,具体流程是这样的,
1.GET通过数据到https://shop.com/home/Shipping/edit这个接口,用过THINKPHP的就会知道是HOME模块下的Shipping控制下的edit方法
2.后端PHP代码如下:
控制器 ShippingController.class.php
public function edit($id) { $res = D('Shipping')->find($id); $this->success($res,'',true); }
也就是说将这条数据取出来,没什么好说的。
that.setData({ "addressEdit": res.data.info, }) }
这里请求成功以后,调用小程序 setData方法,将服务器端返回的信息放到addressEdit[]中,然后在前端页面调用{{addressEdit.id}}、{addressEdit.name}}、{addressEdit.mobile}}、{addressEdit.address}}将数据展示出来,这就是修改时候的操作。
接下来是提交表单的操作
Js代码如下
addSubmit:function(e){ if(e.detail.value.mobile.length==0||e.detail.value.name.length==0 ||e.detail.value.address.length==0){ wx.showToast({ title: '收货人所有信息不得为空!', icon: 'loading', duration: 1500 }) }else if(e.detail.value.mobile.length != 11){ wx.showToast({ title: '请输入11位手机号码!', icon: 'loading', duration: 1500 }) }else{ wx.request({ url: 'https://shop.yunapply.com/home/shipping/save', header: { "Content-Type": "application/x-www-form-urlencoded" }, method: "POST", data:{id:e.detail.value.id,mobile:e.detail.value.mobile,name:e.detail.value.name,address:e.detail.value.address}, success: function(res) { if(res.data.status == 0){ wx.showToast({ title: res.data.info, icon: 'loading', duration: 1500 }) }else{ wx.showToast({ title: res.data.info, icon: 'success', duration: 1000 }) setTimeout(function(){ wx.navigateTo({ url:'../address/index' }) },1000) } }, fail:function(){ wx.showToast({ title: '服务器网络错误!', icon: 'loading', duration: 1500 }) } }) } }
在前端的FORM表单中,当点击formtype=“submit”这个按钮的时候,触发addSubmit事件,前面的if都是JS验证,防止用户不填写信息。
1.其他的request请求差不多,找几个不一样的
url: 'https://shop.yunapply.com/home/shipping/save',
调用服务器端的save方法
header: { "Content-Type": "application/x-www-form-urlencoded" },
由于POST和GET传送数据的方式不一样,POST的header必须是
"Content-Type": "application/x-www-form-urlencoded"
GET的header可以是 'Accept': 'application/json'
data:{id:e.detail.value.id,mobile:e.detail.value.mobile,name:e.detail.value.name,address:e.detail.value.address},
这里是需要POST到服务器端的数据
Save方法代码
public function save() { //$user_id $user_id = 2; if (IS_POST){ $shipping = D('Shipping'); if (!$shipping->create()){ $this->error($shipping->getError(),'',true); }else{ if (is_numeric($_POST['id'])){ if ($shipping->editAddress($_POST['id'])){ $this->success('地址修改成功','',true); }else{ $this->error('地址修改失败','',true); } }else{ if ($shipping->addAddress($user_id)){ $this->success('添加地址成功','',true); }else{ $this->error('添加地址失败','',true); } } } } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
以上是详解微信小程序中增、删、改、查操作实例代码的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

闲鱼官方微信小程序悄然上线,在小程序中可以发布闲置与买家/卖家私信交流、查看个人资料及订单、搜索物品等,有用好奇闲鱼微信小程序叫什么,现在快来看一下。闲鱼微信小程序叫什么答案:闲鱼,闲置交易二手买卖估价回收。1、在小程序中可以发布闲置、与买家/卖家私信交流、查看个人资料及订单、搜索指定物品等功能;2、在小程序的页面中有首页、附近、发闲置、消息、我的5项功能;3、想要使用的话必要要开通微信支付才可以购买;

微信小程序实现图片上传功能随着移动互联网的发展,微信小程序已经成为了人们生活中不可或缺的一部分。微信小程序不仅提供了丰富的应用场景,还支持开发者自定义功能,其中包括图片上传功能。本文将介绍如何在微信小程序中实现图片上传功能,并提供具体的代码示例。一、前期准备工作在开始编写代码之前,我们需要先下载并安装微信开发者工具,并注册成为微信开发者。同时,还需要了解微信

实现微信小程序中的下拉菜单效果,需要具体代码示例随着移动互联网的普及,微信小程序成为了互联网开发的重要一环,越来越多的人开始关注和使用微信小程序。微信小程序的开发相比传统的APP开发更加简便快捷,但也需要掌握一定的开发技巧。在微信小程序的开发中,下拉菜单是一个常见的UI组件,实现了更好的用户操作体验。本文将详细介绍如何在微信小程序中实现下拉菜单效果,并提供具

实现微信小程序中的图片滤镜效果随着社交媒体应用的流行,人们越来越喜欢在照片中应用滤镜效果,以增强照片的艺术效果和吸引力。在微信小程序中也可以实现图片滤镜效果,为用户提供更多有趣和创造性的照片编辑功能。本文将介绍如何在微信小程序中实现图片滤镜效果,并提供具体的代码示例。首先,我们需要在微信小程序中使用canvas组件来加载和编辑图片。canvas组件可以在页面

使用微信小程序实现轮播图切换效果微信小程序是一种轻量级的应用程序,具有简单、高效的开发和使用特点。在微信小程序中,实现轮播图切换效果是常见的需求。本文将介绍如何使用微信小程序实现轮播图切换效果,并给出具体的代码示例。首先,在微信小程序的页面文件中,添加一个轮播图组件。例如,可以使用<swiper>标签来实现轮播图的切换效果。在该组件中,可以通过b

闲鱼官方微信小程序已经悄然上线,它为用户提供了一个便捷的平台,让你可以轻松地发布和交易闲置物品。在小程序中,你可以与买家或卖家进行私信交流,查看个人资料和订单,以及搜索你想要的物品。那么闲鱼在微信小程序中究竟叫什么呢,这篇教程攻略将为您详细介绍,想要了解的用户们快来跟着本文继续阅读吧!闲鱼微信小程序叫什么答案:闲鱼,闲置交易二手买卖估价回收。1、在小程序中可以发布闲置、与买家/卖家私信交流、查看个人资料及订单、搜索指定物品等功能;2、在小程序的页面中有首页、附近、发闲置、消息、我的5项功能;3、

如何使用PHP开发微信小程序的二手交易功能?微信小程序作为一种热门的移动应用开发平台,被越来越多的开发者所使用。在微信小程序中,二手交易是一种常见的功能需求。本文将介绍如何使用PHP开发微信小程序的二手交易功能,并提供具体的代码示例。一、准备工作在开始开发前,需要先确保已具备以下条件:微信小程序的开发环境已搭建完成,包括注册小程序的AppID,并在小程序后台

实现微信小程序中的图片旋转效果,需要具体代码示例微信小程序是一种轻量级的应用程序,为用户提供了丰富的功能和良好的用户体验。在小程序中,开发者可以利用各种组件和API来实现各种效果。其中,图片旋转效果是一种常见的动画效果,可以为小程序增添趣味性和视觉效果。在微信小程序中实现图片旋转效果,需要使用小程序提供的动画API。下面是一个具体的代码示例,展示了如何在小程
