3

我是新手,通过调用jqGrid从 Servlet 填充数据并显示在. 这工作正常没问题。但是,在我的情况下,列名是动态的,因为我将日期显示为列名。AjaxjqGrid

所以,我在搜索 Dynamic colModelfor时发现了下面的代码jqGRid

但是,这会导致两个 Ajax 调用。有没有人使用过动态列标题?

<script type="text/javascript"> 

    var grid = $("#rowsList");
    var url = '/getRowList?Id=9371&fromDate=2011-12-06&toDate=2012-12-06';
    jQuery().ready(function (){ 
        $.ajax({
            url: url,
            dataType: 'json',
            success: function(response) {
                prepareGrid(response);
            },
            error: function(request, textStatus, errorThrown) {
                alert(textStatus + " : " + request.responseText);
            }
        });
    });

    function prepareGrid(response){
        if (response) {
            if (!response.Error) {
                var colData = getColumnsData(response.columnData);
                colData = eval('{' + colData + '}');

                grid.jqGrid({ // This makes second server call
                    url: url,
                    datatype: 'json',
                    mtype: 'POST',
                    colModel: colData,
                    colNames: response.columnData,
                    height : 'auto',
                    pager: '#pager',
                    viewrecords: true,
                    loadtext: 'Loading',
                    sortorder: "asc",
                    gridview: true,
                    altRows: true,
                    cellEdit: false,
                    caption: 'Data List' 
                });
            }
        }
    }

    /**
     * Creates column data for jqgrid
     */
    function getColumnsData(Data) {
        // return column data array in jqGrid compatible format
        // This works fine
    }

</script> 

我的另一个选择是在第一次调用和设置中只返回列名,colModels但如果它可以在单个服务器调用中完成会更好。

4

1 回答 1

2

我想警告您减少 Ajax 调用的数量。如果您是 jqGrid 的新手,了解 jqGrid 使用中的一些常见问题很重要:

  • jqGrid 需要调用grid.jqGrid({...});.
  • jqGrid将多次url使用。

网格在寻呼机中有一些常见的用户界面元素(见答案

在此处输入图像描述

在此处输入图像描述

用户可以使用它与 j​​qGrid 进行交互。因此,如果用户单击“下一页”按钮,更改显示的行数或更改排序列(或排序方向)向服务器发送新请求,url将被发送。使用用户界面的其他元素(如搜索工具)非常实用:

在此处输入图像描述

这也会产生url带有修改参数的新请求。收到服务器响应后,只有网格体将被替换。网格的其他部分将保持不变。您可以使用GridUnload方法重新创建整个网格(请参见此处的示例)

因此,如果您每次都将列定义与网格的数据一起传输,您将发送不需要的数据,这会降低性能而不是提高您想要的性能。

于 2012-12-10T13:10:14.540 回答