如上图,降序的时候,jqGrid会按前台方法排序,这样显然行不通!
(实际上后台数据是以1397、1000、999这样降序的形式返回的!)
说明:通过向后端ajax获取到jsonData,然后传给jqGrid的。没有使用jqGrid自带的方法获取数据。
个人感觉是jqGrid缓存的问题,但是我设置了很多种方法还是无效!
if(_this.hasLoadGrid){ $node[0].grid.beginReq(); $node[0].grid.endReq(); $node.jqGrid('clearGridData'); $node.jqGrid('setGridParam', {data: dataObj}); $node.trigger('reloadGrid'); }else{ $node.jqGrid({ data:jsonData, datatype:"local", cache: false, loadonce: false, onSortCol: function (index, colindex, sortorder){ _this.sData.sort = '{"' + index + '":"' + sortorder + '"}'; _this.view('dataList');//这里是ajax重新加载数据表的方法 } }).trigger('GridUnload'); _this.hasLoadGrid = true; }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据你的描述,你遇到的问题是jqGrid在使用自定义排序逻辑时没有正确反映后台返回的降序数据。尽管后台数据是以1397、1000、999这样的降序排列返回的,但jqGrid似乎仍然按照自己的方式对数据进行了排序。这通常是因为jqGrid默认会尝试自己处理排序逻辑,特别是当datatype
设置为"local"且数据一次性加载(loadonce: true
)时。
针对你的问题,这里有几个可能的解决方案:
确保服务器返回的数据已正确排序:看起来你已经做到了这一点,确认后台确实按需返回了降序数据。
禁用jqGrid的本地排序:既然你希望完全控制排序逻辑,并且每次排序都通过AJAX重新获取数据,你应该确保jqGrid不进行任何本地排序操作。你可以通过设置sortname
和sortorder
参数来指示初始排序状态,同时确保loadonce
设置为false
(你已经这么做了),并且可以考虑添加ignoreReaderSort
选项来告诉jqGrid忽略读取器的排序指令。
$node.jqGrid({
...
loadonce: false,
ignoreReaderSort: true, // 添加这一行来忽略jqGrid的自动排序
...
});
优化onSortCol事件处理:在你的onSortCol
事件处理器中,你正在更新一个排序字符串并重新加载数据。确保这个过程正确地反映了你想要的排序方向,并且在请求数据时明确地将此排序信息传递给后端,以便后端能按正确的顺序返回数据。
清除缓存:虽然你提到已经尝试过多种方法来解决缓存问题,但确保在每次重新加载数据前,jqGrid的内部数据模型被正确清理是很重要的。你已经在代码中调用了clearGridData
和endReq
等方法,这是正确的做法。如果问题依旧,可以尝试在reloadGrid
之前手动删除或重置jqGrid的排序状态,例如通过设置sortname
为空或者重置postData.sortColumn
和postData.sortOrder
(如果适用)。
检查jqGrid版本:确保你使用的jqGrid版本没有已知的排序相关bug。有时候,升级到最新版本可以解决这些问题。
综上所述,重点在于确保jqGrid不会在客户端进行额外的排序操作,并且每次排序动作都能触发向服务器的请求以获取正确排序的数据。希望这些建议能帮助你解决问题。