使用JSON填充jqGrid返回数据并获取Uncaught TypeError无法读取属性'0'的undefined

问题描述:

我想从我的Spring webapp中使用Jackson返回一些JSON并解析它并将其加载到jqGrid中。使用JSON填充jqGrid返回数据并获取Uncaught TypeError无法读取属性'0'的undefined

我得到的数据通过JSONViewer扩展返回并在Chrome中可见。它看起来对我是正确的。

与arraydata本地测试已成功。

这里是我的JSP/HTML/JS:

<link rel='stylesheet' type='text/css' href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/themes/ui-darkness/jquery-ui.css' /> 
<link rel='stylesheet' type='text/css' href='css/jqGrid/ui.jqgrid.css' /> 

<script type='text/javascript' src='js/jquery-1.7.1.min.js'></script> 
<script type='text/javascript' src='js/jquery-ui-1.8.17.custom.min.js'></script> 
<script type='text/javascript' src='js/i18n/grid.locale-en.js'></script> 
<script type='text/javascript' src='js/jquery.jqGrid.min.js'></script> 

<script type='text/javascript'> 

$(document).ready(function() { 
    jQuery("#list").jqGrid({   
     url:"formSubmit.html", 
     datatype: "json", 
     height: 700, 
     width: 1100, 
     colNames: ['ReqID', 'Family', 'ControlID', 'Name', 'Description', 'Category','Priority', 'Notes', 'Parent'], 
     colModel: [ 
     { name: 'reqID', index: 'reqID', width: 40 }, 
     { name: 'family', index: 'family', width: 100 }, 
     { name: 'controlID', index: 'controlID', width: 100 }, 
     { name: 'reqName', index: 'reqName', width: 175 }, 
     { name: 'requirement', index: 'requirement', width: 450,cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal;"' } }, 
     { name: 'category', index: 'category', width: 100 }, 
     { name: 'priority', index: 'priority', width: 100 }, 
     { name: 'requirementNotes', index: 'requirementNotes', width: 100 }, 
     { name: 'parent', index: 'parent', width: 100 } 
     ], 
     rowNum: 10, 
     rowList: [10, 20, 30], 
     pager: '#pager', 
     viewrecords: true, 
     jsonReader : { repeatitems: false } 
    }); 

    jQuery("#list").jqGrid('navGrid', '#pager', { edit: false, add: false, del: false }); 

}); 
</script> 

<table id = 'list'></table> 

这里使用的一些数据从我的Spring容器回来杰克逊:

{ 
"total":"1", 
"page":"1", 
"records":"558", 
"rows":[{ 
    "parent":"", 
    "priority":"", 
    "requirementNotes":"DummyData", 
    "category":"DummyData", 
    "family":"DummyData", 
    "requirement":"DummyData", 
    "reqID":"1", 
    "controlID":"DummyData", 
    "reqName":"DummyData"}] 
} 

我一直回头看看遗漏的类型错误无法读取属性'undefined'作为我在jquery.jqGrid.min.js中的回复:23,我很难过。

+1

很奇怪你在jqGrid中使用的'url'选项有'.html'扩展名并包含(或生成)JSON数据(响应)。 “url”应该不是你的MVC控制器的URL?另一个奇怪的,但不是关键的问题是,你使用jQuery UI 1.8.6中的CSS,而使用jQuery UI 1.8.17中的JS。 – Oleg 2012-02-28 19:43:55

+0

我的Spring MVC控制器的@RequestMapping指向一个“虚拟”html文件。我没想到这是一个问题......但在这一点上,我急于消除变数...... – Raevik 2012-02-28 19:59:47

如何从the demo中看到,它使用了您发布的JSON数据和您的代码,jqGrid应该可以正常工作。

我只能重复我在之前的评论中已经写过的内容:参数url:"formSubmit.html"在我看来非常可疑。如果你调用一些动态组件,你的URL应该没有扩展名,比如“/ myurl /”,或者其他扩展名为“.html”。我建议您分析HTTP流量与Fiddler,Firebug或IE或Chrome的开发者工具(请看“网络”选项卡)。重要的不仅可以是HTTP正文,也可以是HTTP标题,如“Content-Type”。

尝试在jsonreader中设置root: "rows"

+0

谢谢老兄!这解决了我的问题! – Victor 2014-03-19 15:52:21