【问题标题】:jqGrid just show 10 rowsjqGrid 只显示 10 行
【发布时间】:2012-11-02 08:25:21
【问题描述】:

我对这个问题很困惑,因为我是 jqGrid 的新手。 我的数据只显示 10 行。这是我的脚本;

jQuery("#list").jqGrid({
    url:'dounfinish.php?q=1',
    datatype: 'json',
    mtype: 'POST',
    closeafteredit:true,
    colNames:['id','Date', 'Line','Model','Lotno','Qty','PIC'],
    colModel :[ 
            {name:'id', index:'id', hidden:true, width:55}, 
            {name:'Date', index:'Date', width:90, editable:true, search:true, stype:'text',searchoption:{sopt:['cn']}}, 
            {name:'Line', index:'Line', width:80, editable:true, search:true, stype:'text',searchoptions:{sopt:['cn']}},
            {name:'Model', index:'Model', width:180, editable:true, search:true, stype:'text',searchoption:{sopt:['cn']}},
            {name:'Lotno', index:'Lotno', width:80, editable:true, search:true, stype:'text',searchoption:{sopt:['cn']}}, 
            {name:'Qty', index:'Qty', width:80, editable:true, search:true, stype:'text',searchoptions:{sopt:['cn']}},
            {name:'PIC', index:'PIC', width:180, editable:true, search:true, stype:'text',searchoption:{sopt:['cn']}}
            ],
//      pager: jQuery('#pager'),
    gridview:true,
    pager: '#pager',
    width: '100%',
    height: '100%',
    rowNum:10,
    rowList:[10,20,30],
    sortname: 'Date',
    sortorder: "desc",
    viewrecords: true,
    loadonce: true,
//      imgpath: 'themes/basic/images',
    caption: 'DAILY CHECK QTY',
    editurl:'process3.php',
    prmNames:{oper:'action',editoper:'editbaldefect',id:'def_id'}
});

这样的情况:

loadonce: true result View 1 - 10 of 10 --> column filter can work.
loadonce: false result View 1 - 10 of 3500 --> column filter not working.

为什么?


在开发者工具展上:

{"page":1,"total":33223,"records":"332222","rows":[]}

但在 php 页面出现:


更新

我的 jqgrid 使用datetype : json,还需要loadonce : true。我已经像这样试用了:

  1. change loadonce : false --> 结果显示所有记录但不能使用工具栏过滤器
  2. change loadonce : true --> 结果只显示 10 条记录,但工具栏过滤器可以工作
  3. loadonce : true, rowNum: 50 --> 数据仅显示 50(下一个按钮禁用)
  4. 在 phpmyadmin 检查查询 --> 结果所有数据都可以显示(查询 OK)
  5. 使用另一个表(OK)-->结果还是不行
  6. 使用另一个页面然后附加 jqgrid --> 还是不行

为什么 jqgrid 只检索 10 条记录而该表实际上有 100.000 条记录? 以及为什么只有这张桌子而另一张桌子可以工作。

【问题讨论】:

    标签: jquery json jqgrid filtering


    【解决方案1】:

    jqGrid 最初的设计目的是能够用基于服务器的数据填充网格。选项loadonce: true 稍后介绍。所以如果你不使用loadonce(或者如果你使用loadonce: false服务器负责数据的分页、排序和过滤。每次如果用户单击列标题以按列对数据进行排序或用户填写搜索工具栏,则将向服务器发送新请求。如果用户更改每页的行数(在寻呼机中选择其他值作为 10),也会向服务器发送新请求。选项pagerowssidxsord_search,通常是filters。将发送到服务器的参数的默认名称可以通过 jqGrid 的prmNames 选项更改(请参阅the documentation)。

    我个人总是使用filterToolbarstringResult: true 选项。案例中filters参数的格式与高级搜索相同(见here)。

    如果你使用loadonce: true,那么 jqGrid 只从服务器获取数据一次。所以服务器应该在响应中返回所有数据,这与 jqGrid 的 rows 参数无关。服务器应该只对数据进行正确排序。服务器响应中的属性pagetotalrecords 将被忽略。对应的值会根据rows的数据重新计算。

    如果您使用loadonce: true,那么 jqGrid 在第一次加载数据后将datatype 更改为"local"。因此,以后对数据进行排序、分页和过滤的所有请求都将在本地实现,而无需向服务器发出任何额外请求。

    因此,如果您使用loadonce: true 并且服务器返回 10 行数据,那么 jqGrid 将显示 "View 1 - 10 of 10",因为它在服务器响应中仅找到 10 行。

    【讨论】:

    • 此页面是从另一个页面复制而来的。对于原始页面它可以工作(使用SELECT *的服务器页面查询),但是对于这个页面不起作用(使用SELECT ...JOIN...的服务器页面查询)。
    • 为什么服务器只响应10行?实际上我的查询获得了 100.000 多条记录。
    • @nunu:抱歉,我之前已经回答过这个问题。如果您不使用loadonce: true(或者如果您使用loadonce: false您的服务器负责数据的分页、排序和过滤。 jqGrid 只发送参数pagerowssidx 等。服务器应该返回排序和过滤的请求页面数据。响应的"rows":[...] 部分包含数据页,但应正确填写"page""total""records"。您在服务器响应中填写了明确错误的信息。
    • 这对我来说真的很奇怪,为什么页面 A 可以工作,但 B 页面不行。我不知道这个问题的根本原因在哪里。我尝试将 jqgrid 服务器脚本从页面 A 复制到 B 并更改查询,之后我震惊地解决了我的问题。它可以正常工作,但是 A 和 B 之间的服务器脚本没有什么不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2011-04-16
    相关资源
    最近更新 更多