分页加载通常适用于客户端,通常是为了防止一次返回导致客户端崩溃,所以采用下拉加载更多的方式,为了防止数据重复的现象,数据传递建议使用唯一标识id。 普通的下拉加载方式 对于普通的下拉加载我们通常处理方式分为以下步骤: 1 客户端传递请求数目大小和上一次请求最后一条数据的id或者时间(如果是第一次请求则可以不传递) 2 对于后端按照终端请求的id或者时间进行某种特定次序排列,取固定数目返回给终端。由此便可以保证终端每次获取到正确数据
核心sql查询语句
SELECT * FROM admin WHERE id < 10000 ORDER BY id DESC LIMIT 1, size
具体定义的数据结构
# 接口地址/scroll/list
# 请求方式HTTP GET
# 入参{ "size":10,//请求大小 "id":1 //返回数据最后一条id }# 出参# 成功
{ "flag": 1, "result": { "hasMore": ture, //是否有更多数据 "total": 68, "list": [ { "id":1, //文件Id "desc":"描述", //可以为空 "name":"David" }, { "id":2, //文件Id "desc":"描述", //可以为空 "name":"Tom" }, ... ] }}
#失败{ "flag":0, "result":"错误信息"}
对于包含特定条件次序的分页加载的处理方式 比如说,项目要求已经置顶的数据的排列在所有数据的最前面(当然置顶数据的id可能比较小)那么就需要先按照置顶排序、id排序,然后查询数据(对于查询数据,则要根据不同的条件进行不同的处理)。 核心sql查询语句
SELECT * FROM admin WHERE #if(id!=null && state==2) ((id < 21 AND state=2) OR state != 2)) #elseif(id!=null && state!=2) id < 23 ORDER BY FIELD(state,2) DESC, id DESC LIMIT 1, size
具体定义的数据结构
## 接口地址
/scroll/list```
## 请求方式HTTP GET
## 入参{ "size":10,//请求大小 "id":1 //返回数据最后一条id,第一次请求不用传递 "state":2 //返回最后一条数据的状态信息,第一次请求不用传递 }## 出参### 成功{ "flag": 1, "result": { "hasMore": ture, //是否有更多数据 "total": 68, "list": [ { "id":1, //文件Id "desc":"描述", //可以为空 "name":"David", "state":1 }, { "id":2, //文件Id "desc":"描述", //可以为空 "name":"Tom", "state":2 }, ... ] }}### 失败{ "flag":0, "result":"错误信息"}
总结
第二种情况在项目中比较常见,不同的排序条件可能会导致数据的遗漏。故在分页加载过程中要考虑多种情况以及状态判断,做到不重不漏。
添加关注第一时间收到通知
原创不易,如果觉得有用,可以随手转发或者”在看“