分页列表,删除最后一页的最后一条数据的场景该怎么处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon
V2EX    程序员

分页列表,删除最后一页的最后一条数据的场景该怎么处理

  •  
      rizon
    othorizon 2019 年 9 月 10 日 via iPhone 5942 次点击
    这是一个创建于 2314 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知道行业里通用方案怎么处理。删除最后一条数据后,由于前端请求传的页码已经是不存在的页码了,所以会返回空白。
    期望的效果是自动返回真实的最后一页的数据,也就是页码自动-1。
    这东西后台处理还是前端处理?
    后台是 java。
    第 1 条附言    2019 年 9 月 25 日
    哎 这问题逃不掉啊。 现在前端不做只能我后端做了。 但关键是怎么写可以更通用一些,,写 aop 去拦截方法,然后重新调用一次方法去返回? 还是有什么更好的办法。。
    28 条回复    2022-08-04 07:47:11 +08:00
    paodange
        1
    paodange  
       2019 年 9 月 10 日 via Android
    后台不是会返回 pagecount 吗?跟当前页码比较一下,如果小于当前页码,就把当前页码设置为 pagecount
    limuyan44
        2
    limuyan44  
       2019 年 9 月 10 日
    服务端查不到就返回最后一页吧,前端哪知道你还有没有新的数据了。
    ayonel
        3
    ayonel  
       2019 年 9 月 10 日
    每次切换页面的时候也给前端返回总数据量,让前端根据这个数字动态分页
    chinvo
        4
    chinvo  
       2019 年 9 月 10 日
    count: xxx
    amount: xxx
    offset: xxx
    data
    - obj
    - obj

    count 为 0 的时候现实一个占位符

    一定要前一页的话前端重新请求 offset = offset - count
    optional
        5
    optional  
       2019 年 9 月 10 日 via Android
    relay 分页
    optional
        6
    optional  
       2019 年 9 月 10 日 via Android
    看错了。
    xuanbg
        7
    xuanbg  
       2019 年 9 月 10 日
    当然是前端处理咯,这个不是分页控件应该实现的功能么?
    shintendo
        8
    shintendo  
       2019 年 9 月 10 日
    后端好一点吧,前端处理的话要多请求一次
    hyyou2010
        10
    hyyou2010  
       2019 年 9 月 11 日
    恰好我前不久碰到这个问题了。最初的想法是后端处理,后端送回最后一页,也送回总数等等,但是发现这个好心帮忙反而容易导致前端状态系统紊乱。后来改成前端处理,也就是后端返回空内容及文档总数,由客户端根据情况再次请求数据。改成前端处理虽然多了一次访问,但是状态流程顺畅了,舒服。

    不仅仅是你删除最后一条或一页数据,还可能其他用户删除该数据也导致同样的问题。
    pinews
        11
    pinews  
       2019 年 9 月 11 日
    这个东西,就是通用性与便捷性的冲突,如果你知道根本不存在数据为 0 的情况,你可以不必处理,如果你要预期这个结果,而且具有通用性,就要数据为 0 的时候就返回数据为 0 的状态,正常数据的时候也要返回额外的正常状态。不管怎么样,前端都要先检查状态,再处理数据。
    pinews
        12
    pinews  
       2019 年 9 月 11 日
    @hyyou2010 关于这个可以看各大网站的 api 是怎么描述的,确实如 @chinvo 所言。
    LeeSeoung
        13
    LeeSeoung  
       2019 年 9 月 11 日
    后端接口不用设计太复杂 按照当前分页、当前页数据数量作为参数就行,其他的前端处理。
    ssvfdn
        14
    ssvfdn  
       2019 年 9 月 11 日
    删除最后一页的最后一条数据的时候,自动-1 请求。如果当前页只有 1 页就不用请求了。
    aguesuka
        15
    aguesuka  
       2019 年 9 月 11 日 via Android
    删除以后刷新页面,pageindex=min(pagesize,querypagesize)
    hyyou2010
        16
    hyyou2010  
       2019 年 9 月 11 日
    @ssvfdn 自动减 1 可能不行,设想你正浏览第 3 页,版主恰好把第 2 及 3 页都删除了
    mamahaha
        17
    mamahaha  
       2019 年 9 月 11 日
    路由上带后缀的,如果数据发生了变化,那返回时肯定不能是 return back()了。
    shintendo
        18
    shintendo  
       2019 年 9 月 11 日
    @hyyou2010 但是可能有这种情况:前端第一次请求之后,第二次请求之前,有另一个用户加了一条数据,结果就是数据总数没变,页码却往前翻了一页
    CEBBCAT
        19
    CEBBCAT  
       2019 年 9 月 11 日
    据一个普通网民的经验:有的网站 只有 28 个 page,但?page=99 时也有内容,只不过内容是最后一页的
    lithium4010
        20
    lithium4010  
       2019 年 9 月 11 日
    列表接口要返回

    总条数
    当前页数
    总共页数

    其他前端处理就行
    lscho
        21
    lscho  
       2019 年 9 月 11 日 via Android
    前后端分离,前端处理
    不分离,后端处理
    learnshare
        22
    learnshare  
       2019 年 9 月 11 日 via Android
    如果前后端分离:
    删除要指定资源 ID,和是否分页无关
    最后一页数据不存在的话,返回 404 或者空列表比较合适
    分页错误的问题是前端逻辑,前端处理就可以了
    hyyou2010
        23
    hyyou2010  
       2019 年 9 月 11 日
    @shintendo 嗯,有这个可能,这点还真不容易想到。不过这样的结果我觉得还可以接受。
    markgor
        24
    markgor  
       2019 年 9 月 11 日
    那个,好奇问问,删除操作后前端不会重新加载列表吗?
    后端必须有总分页数,
    当前端提交的当前页数>总分页数,就直接把当前页数设置为总分页数。
    passerbytiny
        25
    passerbytiny  
       2019 年 9 月 11 日
    前端后端处理都是一样的。你所说的场景,实际上是两个连续但相对独立的场景:删除一条数据;重新计算总数和计算分页参数,然后重新加载当前页或最后页(不止是删除后,并发修改的时候,也会出现当前页已经不存在的情况)。

    不负责 /没时间负责的前端控件经常丢弃或忽略“重新计算分页参数”。
    水平搓 /不负责任 /没时间负责的后端,会用一个函数,就完成“删除,查询当前页数据,然后返回”的整套流程既然是一个函数处理,那自然就超大概率忘了“数据变动后分页页码要重新计算”的场景。
    markgor
        26
    markgor  
       2019 年 9 月 23 日
    @passerbytiny 不是很认同这个说法。

    首先前端如何都是要处理的,无非是怎么处理罢了(试问前端不处理,后端如何处理前端的事?
    “删除,查询当前页数据,然后返回” <---基本分前後端后都是接口调用取数据吧?后端没必要在删除操作后再执行一次查询数据吧?后端直接提供->新增、修改、删除、读取四个接口,如果前端删除完,直接调用取 即可了吧?
    rizon
        27
    rizon  
    OP
       2019 年 9 月 25 日
    这东西,,谁有更好的办法吗。。。前端不做 后端要做这个了。。
    nmsn
        28
    nmsn  
       2022 年 8 月 4 日
    这个后端处理吧,前端不是知道数据的具体变动,后端才知道真正的最后一页是啥
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2364 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 01:47 PVG 09:47 LAX 17:47 JFK 20:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86