使用Scroll重新加载Jqgrid时出现问题 - 重复行数据和缺少最后一页

时间:2012-05-22 05:47:15

标签: javascript ajax jquery jqgrid

请参考下面的代码,我用它来从数据库加载数据。只要第一次加载数据,代码就可以正常工作。每个记录和每个页面都完美加载。

现在,如果我调用Reload函数,则会产生问题。

  1. 有时它会加载重复的行(比如我的jason返回20行,网格会显示40行)
  2. 我在网格中丢失了最后一页的记录。

  3.  jQuery("#list").jqGrid({
                url: "http://localhost/myapp/myfile.php",
                datatype: "json",                
                mtype:"POST",
                postData:{folder: 'INBOX' },
                jsonReader: 
                {
                    root: "rows",
                    page: "currpage",
                    total: "totalpages",
                    records: "totalrecords",
                    id: "0",
                    cell:"",
                    repeatitems: false
                },
                colNames: ['Id','Message'],
                colModel: [ 
                            { name: 'messageid', index: 'messageid', hidden: true, search:false},
                            { name: 'message', index: 'message', search:false},
                          ],
                rowNum: 10,
                scroll: 1,
                prmNames:{npage:1},
                autowidth: true,
                height: 470,
                loadonce: true,
                viewrecords: true,
                altRows:true,                
                caption: "",
                pager: "#plist",
            });
            jQuery("#list").jqGrid('setFrozenColumns');
    
        function reload_list()
        {
            $("#list").setGridParam({datatype:'json'}).trigger('reloadGrid');
        }
    

    请注意以下信息

    使用的框架 Codeigniter 与JqGrid版本 jquery.jqGrid-4.3.1

    我的代码中包含的文件是

    1. css / ui.jqgrid.css
    2. js / grid.locale-en.js
    3. js / jquery.jqGrid.src.js
    4. 插件/ grid.postext.js
    5. src / jqModal.js
    6. 的src / jqDnR.js

    7. DEMO:http://www.trimantra.com/demo/appointmentsystem/grid.php

      请告诉我如何解决此问题。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

从代码中删除此行:

jQuery("#list").jqGrid('setFrozenColumns');

因此,它正在创建一个新行。

答案 1 :(得分:0)

我无法重现行重复的问题,但我可以在您的应用程序中看到很多其他问题。

我认为您的主要问题是因为您在所有三个网格中加载了具有相同ID 的数据。作为结果,您在页面上有id重复项。解决问题的最简单方法是使用jqGrid的idPrefix选项。

下面是我找到的最重要问题列表:

  • 您在应用程序中包含了错误的jQuery UI。您没有包含主题的images子目录。因此,应用程序在加载http://www.trimantra.com/demo/appointmentsystem/lib/jquery.jqGrid-4.3.1/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png时出现“HTTP / 1.1 404 Not Found”错误。您应该在项目中包含所有images
  • 您不在网格中使用idPrefix选项,而在三个网格中加载相同的数据。因此,所有三个网格都将具有<tr>个具有相同ID的元素。 HTML不允许id重复。要解决此问题,您可以使用例如idPrefix: "a"idPrefix: "b"idPrefix: "c"作为三个网格。根据结果​​,messageid: "45"行将在第一个网格中获得id="a45",在最后一个网格中显示id="b45"id="c45",并且您将在页面上没有ID重复项。< / LI>
  • 我认为scroll: 1loadonce: true的组合没有任何意义。如果我了解您需要执行的操作,则应从所有网格中删除scroll: 1prmNames:{npage:1}。虚拟滚动需要选项。
  • 您应该添加gridview: true选项,以便在行数较多的情况下多次提高网格性能。
  • 生成服务器的服务器响应当前不对应jqGrid请求。该请求将包含rows=10page=1sidx=tonamesord=asc。服务器返回所有48行数据,数据未排序。无论如何,您应该在服务器代码中插入数据排序。
  • 您在所有可见列中使用frozen:true。我觉得在设置中没有任何意义。
  • 如果您不需要显示'messageid'列,则可以从colModel 删除列定义并使用jsonReader: {id: "messageid", repeatitems: false }。结果将保存在页面上的位置(隐藏的列仍然存在于页面上)。
  • 您最好以区域设置独立格式ISO 8601转移日期。此外,您应该使用formatter: 'data'05/16/2012 07:45 AM格式显示日期,您可以使用formatoptions: { newformat: "d/m/Y H:i A" } loadonce: true。如果使用colModel,则主要的好处是列的正确排序顺序。
  • 您应该从},]定义中删除尾随逗号。组合{{1}}是JavaScript中的错误。在最现代的Web浏览器中将忽略该错误(但不像IE6那样旧)。最好编写无错误的代码。