Jqgrid获取全部数据却出现异常行为的问题咨询
解决jqGrid中
getGridParam('data')仅返回当前页数据的问题 我之前也碰到过一模一样的情况,当时折腾了好一会儿才搞明白原因,给你梳理下:
问题根源
当你设置loadonce: true时,jqGrid会把服务器返回的全部数据缓存到内部的localData参数里,但data这个参数默认只存储当前分页下显示的那部分数据。
你看到控制台展开数组时显示了全部数据,其实是浏览器控制台的“实时引用”特性搞的鬼——当你手动展开数组的时候,它会读取这个数组的最新状态,但在你执行console.log(allRowsInGrid.length)的那一刻,data里确实只有当前页的数据,所以长度不对。
解决方案
直接改用localData参数来获取全部缓存的数据就可以了:
var allRowsInGrid = $('#table_outgoing_calls_report').jqGrid('getGridParam','localData'); console.log(allRowsInGrid); console.log(allRowsInGrid.length);
额外注意事项
- 确保你的jqGrid版本支持
localData(目前主流的jqGrid版本都支持这个参数) - 建议把获取数据的逻辑放在
loadComplete回调里,确保数据已经完全加载完成后再执行:
$('#table_outgoing_calls_report').jqGrid({ // 你的其他配置项 datatype: 'json', loadonce: true, loadComplete: function() { var allRows = $(this).jqGrid('getGridParam','localData'); console.log('全部数据长度:', allRows.length); } });
内容的提问来源于stack exchange,提问作者Den B
相关产品推荐
相关产品推荐

