微信小程序 onReachBottom 上拉加载
1、首先在data里定义一下返回数据data,和翻页的页数pagenum
data: { pagenum: 1, //初始页默认值为0 loading: true, endnotice:true },
2、具体的请求过程,包含新老数据的数组合并,实现数据实时更新
getdatalist: function () { //可在onLoad中设置为进入页面默认加载 var that = this; wx.request({ url: 'xxxxxxx/api/wxapp/productGetList', data: { "key": "aa", "pageNum": that.data.pagenum, //从数据里获取当前页数 "pageSize": 6, //每页显示条数 }, success: function (res) { // console.log(res.data.data.list); if (res.data.code == 1){ var arr1 = that.data.datalist; //从data获取当前datalist数组 var arr2 = res.data.data.list; //从此次请求返回的数据中获取新数组 arr1 = arr1.concat(arr2); //合并数组 that.setData({ loading: true, datalist: arr1 //合并后更新datalist }) } else if(res.data.code == 0){ that.setData({ loading: true, endnotice: false }) } }, fail: function (err) { },//请求失败 complete: function () { }//请求完成后执行的函数 }) },
3、翻页时更新页码pagenum+1,并触发新一轮请求,和第2部形成循环。
onReachBottom: function () { //触底开始下一页 var that = this; var pagenum = that.data.pagenum + 1; //获取当前页数并+1 that.setData({ pagenum: pagenum, //更新当前页数 loading:false, endnotice:true }) that.getdatalist();//重新调用请求获取下一页数据 },
4、json 页面设置
{ "onReachBottomDistance": 2 }
5、php后端代码
$pageNum = max(1, $this->request->request('pageNum')); $pageSize = $this->request->request('pageSize'); $pageindex=($pageNum-1) * $pageSize; $list = Db::name('wxappproduct')->where('status', '=',1)->order('weigh desc,id')->limit($pageindex,$pageSize)->select(); if ($list) { $this->success('返回成功', ['list' => $list]); }else{ $this->error(__('no exists')); }
6、wxml页面
<scroll-view scroll-y="true" class='product_body'> <template name="itmes"> <navigator url="../../pages/productshow/index?> <image src='{{siteRoot}}{{list.smallimage}}' class="imagesty" mode="widthFix" lazy-load></image> <view class="protitle">{{list.name}}</view> </navigator> </template> </scroll-view> <!--循环输出列表 begin--> <view wx:for="{{datalist}}" wx:key="index" class="prolist"> <template is="itmes" data="{{list:item,siteRoot:siteRoot}}" /> </view> <!--循环输出列表 end--> <view class="loading" hidden="{{loading}}"> <van-loading size="24px" type="spinner">加载中...</van-loading> </view> <view class="endnotice" hidden="{{endnotice}}"> <van-divider contentPosition="center">数据已全部加载完毕</van-divider> </view>