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

Grid.js服务端排序触发多次重复请求的原因及解决方法

Grid.js服务端排序时请求次数等于可排序列数的问题排查与解决

原因分析

问题根源在分页配置的URL拼接逻辑:你的分页server.url函数直接用?拼接参数,但初始请求URL已经带有?(https://swapi.dev/api/films?),生成了格式无效的URL(如https://swapi.dev/api/films??limit=3&offset=0)。当触发排序时,Grid.js内部请求处理逻辑解析该无效URL时,会重复发起请求,次数恰好等于可排序列的数量。

解决方法

修正参数拼接逻辑:判断初始URL是否已包含参数分隔符?,已存在则用&拼接新参数,否则用?,确保URL格式合法。

修正后的代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <link
      href="https://unpkg.com/gridjs/dist/theme/mermaid.min.css"
      rel="stylesheet"
    />
  </head>
  <body>
    <div id="wrapper"></div>
    
    <script src="https://unpkg.com/gridjs/dist/gridjs.umd.js"></script>
    <script type="text/javascript">
      new gridjs.Grid({
        columns: ['Title', 'Director', 'Producer'],
        sort: {
          multiColumn: false,
          server: {
            url: (prev, columns) => {
              if (!columns.length) return prev;
              const col = columns[0];
              const dir = col.direction === 1 ? 'asc' : 'desc';
              const colName = ['title', 'director', 'producer'][col.index];
              // 动态选择参数分隔符
              const separator = prev.includes('?') ? '&' : '?';
              return `${prev}${separator}order=${colName}&dir=${dir}`;
            }
          }
        },
        pagination: {
          limit: 3,
          server: {
            url: (prev, page, limit) => {
              const params = `limit=${limit}&offset=${page * limit}`;
              // 动态选择参数分隔符
              const separator = prev.includes('?') ? '&' : '?';
              return `${prev}${separator}${params}`;
            }
          }
        },
        server: {
          url: 'https://swapi.dev/api/films?',
          then: data => data.results.map(m => [
            m.title, m.director, m.producer
          ]),
          total: data => data.count
        } 
      }).render(document.getElementById("wrapper"));
    </script>
  </body>
</html>

额外提示

如果只需部分列支持排序,可在columns配置中为对应列添加sort: false属性,进一步减少潜在的请求问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:30:30