jqGrid未加载数据

jqGrid未加载数据,jqgrid,Jqgrid,我肯定这是我错过的简单的东西,但我就是找不到。我在这里指定了一个简单的jqGrid: $('#mainGrid').jqGrid({ datatype: 'local', colNames: ['id', 'name'], colModel: [ { name: 'id', index: 'id', width: 100 }, { name: 'name', index: 'name', width: 300 } ], ro

我肯定这是我错过的简单的东西,但我就是找不到。我在这里指定了一个简单的jqGrid:

$('#mainGrid').jqGrid({
    datatype: 'local',
    colNames: ['id', 'name'],
    colModel: [
        { name: 'id', index: 'id', width: 100 },
        { name: 'name', index: 'name', width: 300 }
    ],
    rowNum: 9999,
    sortname: 'name',
    viewrecords: true,
    sortorder: 'asc',
    data: [{"id":"924c18a4-cad6-4b6a-97ef-f9ca61614530","name":"Pathway 1"},{"id":"54897f40-49ab-4abd-acac-6047006c7cc7","name":"Pathway 2"},{"id":"61542c48-102f-4d8e-ba9f-c24c64a20d28","name":"Pathway 3"},{"id":"c4ca9575-7353-4c18-b38a-33b383fcd8b2","name":"Pathway 4"}]
});
这将正确加载。简单的概念证明。现在,我尝试用对服务器资源的调用替换本地数据:

$('#mainGrid').jqGrid({
    url: 'AJAXHandler.aspx',
    datatype: 'json',
    colNames: ['id', 'name'],
    colModel: [
        { name: 'id', index: 'id', width: 100 },
        { name: 'name', index: 'name', width: 300 }
    ],
    rowNum: 9999,
    sortname: 'name',
    viewrecords: true,
    sortorder: 'asc'
});
Response Headers
  Cache-Control     private
  Content-Length    261
  Content-Type      text/html; charset=utf-8
  Server            Microsoft-IIS/6.0
  MicrosoftSharePointTeamSe...    12.0.0.6219
  X-Powered-By      ASP.NET
  X-AspNet-Version  2.0.50727
  Set-Cookie        WSS_KeepSessionAuthenticated=80; path=/
  Date              Sat, 23 Apr 2011 14:35:43 GMT

Request Headers
  Host              cyber0ne.com
  User-Agent        Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16
  Accept            application/json, text/javascript, */*; q=0.01
  Accept-Language   en-us,en;q=0.5
  Accept-Encoding   gzip,deflate
  Accept-Charset    ISO-8859-1,utf-8;q=0.7,*;q=0.7
  Keep-Alive        115
  Connection        keep-alive
  X-Requested-With  XMLHttpRequest
  Referer           http://cyber0ne.com/dovetail_pages/Member/Pathways.aspx?MemberID=b428e0a7-dd55-de11-8e97-0016cfe25fa3
  Cookie            WSS_KeepSessionAuthenticated=80

Params
  _search   false
  nd        1303569347783
  page      1
  rows      9999
  sidx      name
  sord      asc

Response
  [{"id":"4d4b8249-b5f9-4da6-aba2-bf3af588d560","name":"Pathway 1"},{"id":"230184e6-44cc-4274-97fd-b455440cd9c0","name":"Pathway 2"},{"id":"7f938218-b963-495f-9646-f3cfb1e63ea1","name":"Pathway 3"},{"id":"2b17f23e-5500-4b01-ac1c-df2de90dc511","name":"Pathway 4"}]
服务器资源返回相同的数据。但是网格没有加载数据。(至少,它没有显示任何记录。)我已经向FireBug确认资源确实正在被调用,并且正在返回预期的数据

起初,我认为资源响应中的内容类型应该更改为
application/json
,但这没有什么区别。该响应是否还有其他问题导致网格无法加载数据

服务器资源的Firebug输出:

$('#mainGrid').jqGrid({
    url: 'AJAXHandler.aspx',
    datatype: 'json',
    colNames: ['id', 'name'],
    colModel: [
        { name: 'id', index: 'id', width: 100 },
        { name: 'name', index: 'name', width: 300 }
    ],
    rowNum: 9999,
    sortname: 'name',
    viewrecords: true,
    sortorder: 'asc'
});
Response Headers
  Cache-Control     private
  Content-Length    261
  Content-Type      text/html; charset=utf-8
  Server            Microsoft-IIS/6.0
  MicrosoftSharePointTeamSe...    12.0.0.6219
  X-Powered-By      ASP.NET
  X-AspNet-Version  2.0.50727
  Set-Cookie        WSS_KeepSessionAuthenticated=80; path=/
  Date              Sat, 23 Apr 2011 14:35:43 GMT

Request Headers
  Host              cyber0ne.com
  User-Agent        Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16
  Accept            application/json, text/javascript, */*; q=0.01
  Accept-Language   en-us,en;q=0.5
  Accept-Encoding   gzip,deflate
  Accept-Charset    ISO-8859-1,utf-8;q=0.7,*;q=0.7
  Keep-Alive        115
  Connection        keep-alive
  X-Requested-With  XMLHttpRequest
  Referer           http://cyber0ne.com/dovetail_pages/Member/Pathways.aspx?MemberID=b428e0a7-dd55-de11-8e97-0016cfe25fa3
  Cookie            WSS_KeepSessionAuthenticated=80

Params
  _search   false
  nd        1303569347783
  page      1
  rows      9999
  sidx      name
  sord      asc

Response
  [{"id":"4d4b8249-b5f9-4da6-aba2-bf3af588d560","name":"Pathway 1"},{"id":"230184e6-44cc-4274-97fd-b455440cd9c0","name":"Pathway 2"},{"id":"7f938218-b963-495f-9646-f3cfb1e63ea1","name":"Pathway 3"},{"id":"2b17f23e-5500-4b01-ac1c-df2de90dc511","name":"Pathway 4"}]
更新:

根据以下@Paul Creasy的回答,回复内容为:

{"total":4,"page":1,"records":4,"rows":[{"id":"55132687-b0bd-4c89-97cb-122d127429eb","name":"Pathway 1"},{"id":"123ba476-1560-4148-ae96-968bdd10e190","name":"Pathway 2"},{"id":"43f5660b-141c-4ccc-848e-6b41667b399a","name":"Pathway 3"},{"id":"b0d21316-d07d-4b46-8011-89c3cb07a8f6","name":"Pathway 4"}]}
行为发生了轻微的变化。网格现在显示“正在加载”,但仍然没有加载数据。

根据文档,预期的json格式是:

{ 
  "total": "xxx", 
  "page": "yyy", 
  "records": "zzz",
  "rows" : [
    {"id" :"1", "cell" :["cell11", "cell12", "cell13"]},
    {"id" :"2", "cell":["cell21", "cell22", "cell23"]},
      ...
  ]
}
因此,您的web服务应该返回以下内容:

{
    "total": "4",
    "page": "1",
    "records": "4",
    "rows" : [
        {
            "id": "4d4b8249-b5f9-4da6-aba2-bf3af588d560",
            "name": "Pathway 1" 
        },
        {
            "id": "230184e6-44cc-4274-97fd-b455440cd9c0",
            "name": "Pathway 2" 
        },
        {
            "id": "7f938218-b963-495f-9646-f3cfb1e63ea1",
            "name": "Pathway 3" 
        },
        {
            "id": "2b17f23e-5500-4b01-ac1c-df2de90dc511",
            "name": "Pathway 4" 
        } 
    ]
}
目前,您只有行数组

您可以实现自己的函数来读取json,但我从来没有这样做过,请参阅上面链接的“jsonReader as function”部分


编辑:

最初我错了,或者您应该将repeatitems标志设置为false:

jsonReader : {
   repeatitems: false
},
使用上面的json(我想!)或返回如下数据:

{
    "total": "4",
    "page": "1",
    "records": "4",
    "rows" : [
        {
            "id": "4d4b8249-b5f9-4da6-aba2-bf3af588d560",
            "cells" : ["Pathway 1"]
        },
        {
            "id": "230184e6-44cc-4274-97fd-b455440cd9c0",
            "cells" : ["Pathway 2"]
        },
        {
            "id": "7f938218-b963-495f-9646-f3cfb1e63ea1",
            "cells" : ["Pathway 3"]
        },
        {
            "id": "2b17f23e-5500-4b01-ac1c-df2de90dc511",
            "cells" : ["Pathway 4"] 
        } 
    ]
}

我总是做后者,但我认为前者可能更好

保罗的回答绝对正确。您应该只使用
jsonReader:{repeatitems:false}
。我决定再写一些附加信息,只是为了澄清为什么jqGrid一开始无法读取原始数据。我想另外描述
jsonReader
参数如何帮助读取从服务器返回的JSON或XML数据

首先,您可以在jqGrid中读取几乎任何输入的JSON数据。您应该只定义描述如何读取数据的
jsonReader
参数。例如,jqGrid可以根据以下
jsonReader
读取原始格式do中的数据:

jsonReader: {
    repeatitems: false,
    page: function() { return 1; },
    root: function (obj) { return obj; },
    records: function (obj) { return obj.length; }
}
你可以看到这条路真的很有效。在我的文章中,您可以了解更多关于这方面的信息,我建议在青年等情况下使用函数作为
jsonReader
的参数

为什么需要在服务器响应中以如此奇怪的形式提供数据?为什么需要
jsonReader
?原因是jqGrid允许服务器实现排序分页和可选的过滤/搜索。因此,对服务器的请求不像“请给我用户列表”,而是更像“请按姓氏对用户排序,并给我数据的第5页,其中页面由10行组成”。页面大小(本例中为10)将从jwGrid寻呼机的组合框中获取。
rowList
数组参数定义可能值的列表,用户可以选择自己喜欢的页面大小

返回的数据不仅应包含多达10行请求的数据,还应包含树附加参数:“总计”、“页面”和“记录”,这些参数描述了将在寻呼机中填写的一些字段:

构建网格所包含的数据是对象数组。每个数组项都包含关于一个网格行的信息。数组项可以是具有命名属性的对象,如

{"id":"55132687-b0bd-4c89-97cb-122d127429eb","name":"Pathway 1"}
或者像这样的物体

{"id":"55132687-b0bd-4c89-97cb-122d127429eb",
 cell:["55132687-b0bd-4c89-97cb-122d127429eb","Pathway 1"]}
或者像这样的数组

["55132687-b0bd-4c89-97cb-122d127429eb","Pathway 1"]
要以第一种格式读取数据,应该使用
jsonReader:{repeatitems:false}
。第二种格式是默认格式,要读取数据,无需定义任何
jsonReader
。要读取最后一种格式的数据,我们应该为
id
列定义
jsonReader:{cell:'}
,并另外定义
key:true
。最后一种格式是最紧凑的,但只有当jqGrid列中的一个具有可解释为id的唯一的数据时,才可以使用它。
id
非常重要,因为jqGrid使用
元素构建HTML表,其中
元素正好具有一个返回的
id
。一个页面内不允许有与HTML规范对应的重复id


最后一句话。如果您不能或不想在服务器端实现分页和排序,则应返回服务器响应中的所有数据,并使用jqGrid的
loadonce:true
参数。这将在第一次数据加载后将jqGrid的
数据类型
参数更改为“local”。之后,数据的排序和分页将在jqGrid的JavaScript代码中完成。

我在firefox的项目中遇到了类似的问题。我试图在页面加载时将数据加载到jqgrid中。但我只看到“加载…”,网格中没有数据

我一步就解决了。这听起来可能很傻,但这正是我为了让它工作所做的:

我刚刚注释掉了我的
中指向js文件的
标记:
jquery.jqGrid.js
,因为我已经有另一个
标记指向js文件:
jquery.jqGrid.min.js

您还需要确保脚本的顺序正确。。。首先加载jquery,然后加载jqgrid文件


这解决了我在firefox中加载数据的问题。

该链接需要身份验证,请您发布返回的数据。@Paul Creasy:啊,我的疏忽。现在编辑以显示详细输出…您应该在
id
列的定义中添加“key:true”。此外,
total
的值应为总页数,在您的情况下为1。您需要做的最重要的更改是,如果您不希望,则包括
jsonReader:{cell:'}