微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – jqGrid:在表中的本地数据之后加载JSON数据

我有一个非常具体的问题:我有一个包含四个选项的小表单.您可以填写或不填写它们,当您单击“确定”时,我会根据这些选项加载带有数据的jqgrid.但由于我不知道我的列是什么样的,我让我的servlet生成列模型和列名;因此,我必须发出一个AJAX请求来加载数据,然后将其作为“本地”数据填充到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");

    }
});

/编辑:我尝试过以下操作,但这仍然无法解决网格不知道实际有多少总页数的问题(实际上,在那一点上,我甚至都不知道),并且,在加载后,它认为它只获取本地数据.是否可能有onScroll事件?我还没找到一个.

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); 
                    }
                });
            },

解决方法:

你不能做这样的事情……获取网格,清除数据,定义网址以获取数据(它可能会根据用户选择的选项而改变),然后将数据格式更改为json而不是本地.

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 Stored Proc中支持分页的示例,这非常有用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐