jqGrid:在表中已有的本地数据之后加载 JSON 数据

jqGrid: Load JSON data after local data already in table

本文关键字:数据 之后 JSON 加载 jqGrid      更新时间:2023-09-26

我有一个非常具体的问题:我有一个有四个选项的小表单。您可以填写或不填写它们,当您单击"确定"时,我会根据这些选项加载带有数据的 jqGrid。但是由于我不知道我的列是什么样子的,所以我让我的 servlet 生成列模型和列名;因此,我必须发出 AJAX 请求来加载数据,然后将其作为"本地"数据填充到 jqGrid 中。不过我想使用分页。

因此,我的问题:在通过本地数据建立jqGrid之后,如何将更多数据加载到jqGrid中?

代码如下:

$.ajax({
    type : 'GET',
    url : 'data.jsp',
    data : reqData,
    dataType : 'json',
    error: function() {
        $("#dialog-message").dialog("open");
        $("#ajax-loader").css("display", "none");
    },
    success : function(result) {
        jQuery("#results").jqGrid({
            data : result.rows,
            datatype : "local",
            colNames : result.columnNames,
            colModel : result.columnModel,
            pager : $('#pager'),
            rowNum : 1000,
            scroll : true,
            viewrecords : true,
            sortname : 'TITEL',
            width : window.innerWidth - 30,
            height : window.innerHeight - 190,
            altRows : true,
            loadError: function() {
                $("#dialog-message").dialog("open");
                $("#ajax-loader").css("display", "none");
            },
            loadComplete: function() {
                $("#ajax-loader").css("display", "none");
            }
        }).jqGrid("navGrid", "#pager", {
            edit: false,
            add: false,
            del: false,
            search: true,
            refresh: false
        }).jqGrid("gridResize");
    }
});

/edit:我尝试执行以下操作,但这仍然不能解决网格不知道实际有多少总页的问题(实际上,在这一点上,我什至不知道),而且,加载后,它认为它只获取本地数据。是否有滚动事件或其他什么?我还没有找到。

datatype : !json ? "local" : function(postdata) {
                $.ajax({
                    type: 'GET',
                    url: 'data.jsp',
                    data: $.merge(postdata, reqData),
                    dataType: 'json',
                    success: function(data, status, jqXHR) {
                        var mygrid = jQuery("#results")[0];
                        var myjsongrid = eval("("+jqXHR.responseText+")");
                        mygrid.addJSONData(myjsongrid); 
                    }
                });
            },

你能不能不做这样的事情...获取网格,清除数据,定义要从中获取数据的 URL(它可能会根据用户选择的选项而更改),然后将 Dataformat 更改为 JSON 而不是 local。

var grid = $('#TargetGridID');
    grid.clearGridData();
    grid.setGridParam({ url: '../controller/action?datatype=Option1' });
    grid.setGridParam({ datatype: 'json' });
    grid.trigger('reloadGrid');

我们使用这种方法,效果很好...将其与能够分页的存储过程一起使用,网格速度非常快!我知道一个 20,000 行的网格大约需要 700 毫秒,页数为 500 行。

如果您将SQL用于数据,我可以上传有关如何在SQL存储过程中支持分页的示例,非常有用的东西。