【问题标题】:Rows are duplicated when I have already used idPrefix当我已经使用 idPrefix 时,行重复
【发布时间】:2015-11-18 14:33:20
【问题描述】:

在一个页面上,我有多个网格,其中一些值相同/从同一个数据库查询。当网格不断刷新时,我得到了重复的行。这是为什么?当我用力刷新页面时,重复的行消失了。

我用过:

idPrefix: $(gridObject).attr('id') + "_" 
// gridObject is a reference to a particular jqGrid

对于页面上的每个jqGrid,但行 id 是重复的,如下所示:

界面外观快照:

应该只有 2 个组标题 dhoopafshan。这可能是什么原因?我正在使用jqGrid 4.6.0

【问题讨论】:

  • 您能否提供重现问题的演示(例如在 jsfiddle 中)?需要网格的测试数据和选项。应该确保 input data 没有 id 重复项(例如两个具有相同 id 等于 1 的输入项),并且需要查看如何填充网格。顺便说一句,如果您使用最新的免费jqGrid,您是否尝试过同样的问题。请参阅the wiki,其中描述了您需要临时用于测试的 URL。
  • @Oleg 这是一个网格的 php 函数:pastebin.com/tt2vEMwz。这个(pastebin.com/gPtpSsqH)和另一个文件(pastebin.com/2JtTX1Uv)包含网格 js 功能。我已经提到了最终的 json。我尝试了新的.js of jqgrid,但由于与当前代码的兼容性问题而无法使用。重复并非一直发生,而是随机发生!
  • 抱歉,这是您的代码片段。我向您询问了可以调试的演示(例如在 jsFiddle 中)。该代码不包含和输入数据。 ,{"JobID":" ","FileName":" ","StartIndex":" ","EndIndex":" ","SplitIndex":" ","Duration":" ","FileSize":" ","LogStatus":" ","Name":"dhoop"} 之类的评论不会显示您的输入数据中存在哪些 ids

标签: jquery jqgrid


【解决方案1】:

我不想对您发布的代码写太多批评。我只描述与您发布的问题有关的部分。

在我看来,服务器代码向 jqGrid 返回了不正确的数据。您从服务器加载数据(datatype 不是 "local")。这意味着服务器代码必须为分组准备数据。了解加载数据的两个基本内容很重要:

  • 数据项必须具有唯一的 id,并且您应该正确告知 jqGrid 项中的哪个值是 id。
  • 从服务器返回的数据必须正确排序。

例如,如果您使用选项groupingView: {groupField: "column1", ...}sortname: "column2",那么数据必须在服务器上按column1, column2 排序。我的意思是第一个排序标准必须是分组字段(字段)(列column1),第二个排序标准必须是column2(来自sortname: "column2")。我想数据在后端被错误地排序。您的问题描述:“我得到重复的行。这是为什么?当我硬刷新页面时,重复的行会消失。”让我们假设这一点。

其次,您在问题的评论中写道,返回数据的每一项的格式都类似于{"JobID":"1","FileName":" ","StartIndex":"0","EndIndex":"0","SplitIndex":"0","Duration":"0","FileSize":"0","LogStatus":" ","Name":"afshaan"}。我可以猜测JobID 属性的值对于每个项目都是唯一的。如果正确的jsonReader

jsonReader: {
    repeatitems: false,
    id: "JobID"
}

jsonReader 通知 jqGrid 如何解析输入数据项。你改用下面的jsonReader

jsonReader : {
    root: "rows",
    records: "records",
    viewrecords: true,
    repeatitems: true,
    cell: "",
    id: "0"
}

这似乎是错误的。

此外,您使用定义为函数的 jqGrid 的 datatype 参数。我在stackoverflow上看到的所有使用datatype作为函数的代码示例都是错误的。这些示例来自为非常旧的 jqGrid 版本(3.6 或更早版本)创建的一些旧演示。我强烈建议您改用datatype: "json"。在我看来,您只需添加选项ajaxGridOptions: { contentType: "application/json" } 并使用正确的jsonReader。我猜可能是这样的

jsonReader: {
    root: "responseJSON.rows",
    page: "responseJSON.page",
    total: "responseJSON.total",
    records: "responseJSON.records",
    repeatitems: false,
    id: "JobID"
}

【讨论】:

    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多