在一些情况下,小程序列表页不适合使用翻页获取数据展示,拿发贴子的例子来说:
问题1:页面上拉获取更多数据时,可能出现数据重复
假如数据库有50条数据,第一次进来取最新的10条展示,然后此时别人新发了2条贴子,
那你再去上拉获取第二页,会再次取到上次10条里的最后2条,因为此时这2条已经成了第二页开头的两条记录,那么页面就会展示重复的两条记录;
问题2:页面上拉获取更多数据时,新旧数据展示顺序可能发生错乱
还是拿上个例子来说,如果第一次进来取了最新的10条展示,在你上拉前,此时别人已经发了100条贴子,那你再去上拉加载第二页,得到的就是最新100条里的第11到20条,那么发表时间更新的数据将会展示在历史数据后面(不符合逻辑,应该最上面展示最新的数据)
解决办法思路
我们列表页一般都是倒序显示
1.刚进入页面,获取前10条,并将最大的id和最小的id保存起来
-
maxid (用于下拉刷新)
-
minid (用于上拉加载更多)
2.假如上拉加载,将minid传到后台,获取id小于minid的最前10条,追加到原来10条后
-
并将minid更新为当前10条的最小id
3.假如下拉刷新,将maxid传到后台,获取id大于maxid的所有数据,插入到原来10条前
-
并将maxid更新为当前的最大id
4.对于下拉刷新,假如短时间就会产生大量数据,那么就不便将新数据全部取回来,可以简单点
-
直接取最新的10条记录,覆盖页面数据展示即可,更新最小minid
-
再通过上拉去加载新数据