分页加载通常适用于客户端,通常是为了防止一次返回导致客户端崩溃,所以采用下拉加载更多的方式,为了防止数据重复的现象,数据传递建议使用唯一标识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":"错误信息"
}
总结
第二种情况在项目中比较常见,不同的排序条件可能会导致数据的遗漏。故在分页加载过程中要考虑多种情况以及状态判断,做到不重不漏。
添加关注第一时间收到通知
原创不易,如果觉得有用,可以随手转发或者”在看“