You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

分页查询点击上一页返回数据异常 Skip参数错误排查

问题根因

问题出在分页参数skip的计算逻辑错误,你之前判断问题不在AngularJS层面的结论是错的,后端查询逻辑本身没有问题。

分页场景下skip(跳过条数)的正确计算公式为:

skip = (目标页码 - 1) * 单页数据量(take)

你可以对照自己的参数验证:

  • 初始加载第一页:pageNumber=1,按公式算skip=(1-1)*5=0,和你传的参数一致,跳过0条取5条,返回A-E,结果正常
  • 点Next到第二页:pageNumber=2,按公式算skip=(2-1)*5=5,和你传的参数一致,跳过前5条取5条,返回F-I,结果正常
  • 点Prev回第一页:你实际传的skip=4,完全不符合公式计算的正确值0。此时后端按逻辑跳过前4条(AA、BB、CC、DD),取后续5条数据,正好是EE、FF、GG、HH、II,也就是你看到的E-I结果,和后端执行逻辑完全匹配。

错误触发原因

你的分页控件在Prev按钮的点击逻辑里,用了错误的偏移计算规则:大概率是直接拿当前页第一条数据的索引做减1操作算skip——第二页第一条数据的索引是5,错误做5-1=4的计算,就得到了错误的skip=4参数。

修复方案

1. 前端参数计算逻辑修正

不要单独维护skip变量,所有分页跳转(上一页、下一页、点击指定页码)触发时,统一用目标页码和单页量计算skip,不要在按钮事件里手动对skip做加减:

// 分页跳转统一入口
function onPageChange(targetPage) {
  const pageSize = 5;
  const skip = (targetPage - 1) * pageSize;
  // 调用接口传参
  GetCategories(targetPage, skip, pageSize);
}

2. 后端增加兜底校验(可选,推荐)

后端不要完全信任前端传入的skip值,直接根据传入的pageNumber和take计算正确的偏移量,从根源避免前端传参错误导致的返回数据异常:

public PagedCategory GetCategories(int pageNumber, int skip = 0, int take = 0)
{
    var pc= new PagedCategory();
    if (take > 0)
    {
        // 后端兜底计算正确偏移,忽略前端传入的错误skip
        int validSkip = (pageNumber - 1) * take;
        var q = ctx.GetSortedData();// 已按PriorityOrder排序
        pc.Categories = q.Skip(validSkip).Take(take).ToList();
        pc.TotalItems = q.Count();
        pc.CurrentPage = pageNumber;
        var tp = Math.Ceiling((double)pc.TotalItems / take);
        pc.TotalPages = Convert.ToInt32(tp);
    }
    return pc;
}

内容的提问来源于stack exchange,提问作者Computer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 05:27:21