Ajax响应绑定JqGrid后分页功能失效,求解决方案
问题分析与解决方案
你的分页参数传递失效,核心原因是当前使用的datatype: "jsonString"是本地数据模式,这种模式下jqGrid只会基于已加载的静态数据做客户端分页,不会向服务器发起新的请求传递分页参数(如page、rows)。以下分两种场景给出修复方案:
场景1:服务器端分页(推荐,适合大数据量)
如果你的需求是点击分页按钮时,向服务器请求对应页的数据,需要修改配置如下:
- 替换数据模式:将
datatype改为"json",移除datastr配置,由jqGrid自动发起Ajax请求。 - 配置请求地址:添加
url字段指向你的后端接口。 - 适配请求方式:通过
mtype指定GET/POST(根据后端接收方式选择)。 - 确保参数自动传递:jqGrid会自动向服务器传递分页参数:
page(当前页)、rows(每页条数)、sidx(排序字段)、sord(排序方向),后端需接收并处理这些参数,返回对应页的数据及分页元信息。
修改后的代码示例:
$("#tblrent").jqGrid({ url: "你的后端接口地址", // 替换为实际接口路径 datatype: "json", mtype: "POST", // 按需改为GET height: "auto", colNames: stock.getColumnName(data1[0]), colModel: stock.getColmodel(data1[0]), caption: "Stocks", viewrecords: true, gridview: true, rowNum: 5, rowList: [5, 10, 20, 50, 100], pager: $("#divPager"), jsonReader: { repeatitems: false, root: "rows", page: "page", total: "total", records: "records" }, postData: { // 可选:添加额外需要传递给后端的参数,如搜索条件 // exampleParam: "exampleValue" }, loadComplete: function (responseData) { // 加载完成后的回调,responseData为后端返回的JSON数据 }, onSelectRow: function (id) { }, onCellSelect: function (rowId, iCol, content, event) { var rowData = jQuery('#tblrent').jqGrid('getRowData', rowId); var rowData1 = JSON.stringify(rowData); localStorage.setItem('selectedRow', rowData1); } });
场景2:客户端分页(仅适合小数据量)
如果后端一次性返回所有数据,需要前端自行分页,需确保:
GRIDDATA.rows是全量数据,而非仅第一页数据。total字段计算正确:total = Math.ceil(records / rowNum)(你的示例中records:10、rowNum:5,total:2是正确的)。- 确认分页容器
#divPager已正确渲染在DOM中。
若仍有问题,可检查是否在初始化后调用了gridUnload或其他重置方法,导致分页组件失效。
内容的提问来源于stack exchange,提问作者Ranjan Kumar
相关产品推荐
相关产品推荐

