【发布时间】:2016-06-14 20:31:52
【问题描述】:
我有一个公开的 Web 服务,它以 JSON 或 XML 格式返回数据。我已经设置了一个 JSP 页面并添加到 jQgrid 中。数据显示得很好,但是当我尝试使用 filterToolbar 过滤结果时它失败了。萤火虫说“ TypeError: jQuery.jgrid 未定义".
我已经阅读了几乎所有关于 jQuery 和 jqGrid 的帖子,但我不知道为什么会出现这个错误。我正在从 appfuse 原型运行休眠和 Spring MVC。 /services/api/vulnss 将根据请求的类型返回 xml 或 json。 json 和 XML 都可以很好地填充网格,我可以对所有内容进行排序和分页。
<html>
<head>
<link href="/resources/css/ui.jqgrid.css" rel="stylesheet" type="text/css"/>
<link href="/resources/css/ui.jqgrid-bootstrap.css" rel="stylesheet" type="text/css"/>
<link href="/resources/css/ui.jqgrid-bootstrap-ui.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="/resources/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="/resources/js/i18n/grid.locale-en.js"></script>
<script type="text/javascript" src="/resources/js/jquery.jqGrid.min.js"></script>
</head>
还有脚本部分:
<script type="text/javascript">
var $j = jQuery.noConflict(); (函数($j){
$j().ready(function (){
$j("#jqGrid").jqGrid({
url: '/services/api/vulns',
mtype: "GET",
//styleUI : 'Bootstrap',
datatype: "xml",
colModel: [
{ label: 'idcveconfig', name: 'idcveconfig', key: true, width: 75 },
{ label: 'cveid', name: 'cveid', width: 150 },
{ label: 'product', name: 'product', width: 150 },
{ label: 'version', name: 'version', width: 150 },
{ label:'vendor', name: 'vendor', width: 150 },
{ label:'vulnsummary', name: 'vulnsummary', width: 150 }
],
viewrecords: true,
loadonce: true,
height: 250,
rowNum: 20,
gridview: true,
pager: "#jqGridPager",
caption: "LOading data from server at once",
xmlReader : {
root: "List",
row: "item",
//page: "rows>page",
//total: "rows>total",
//records : "rows>records",
repeatitems: false,
//cell: "cell",
//id: "[id]",
//userdata: "userdata",
}
});
$j("#jqGrid").filterToolbar({searchOnEnter : true});
});
})( jQuery );
我用 chrome 打开了开发工具,在控制台中我用 $j 交换了 jQuery,它返回了 fale。我不确定它应该返回什么,但字符串 307 存在于“idcveconfig”字段中。
【问题讨论】:
-
你能把它添加到 jsfiddle 吗?
-
您使用哪个版本的 jqGrid 以及来自哪个分支的 jqGrid(free jqGrid、Guriddo jqGrid JS 或版本 the wiki)并验证免费 jqGrid 中是否也存在问题?如果问题存在,请提供demo(非最小化
jquery.jqgrid.src.js),可用于重现问题。 -
我使用的是来自 Guriddo 的最新版本,所以是 5.2。切换到免费的 jqGrid 后,我看到一些 UI 的东西清晰了,它在 chrome 上运行得更好。但我仍然在同一个地方失败。但失败更清楚一点。现在它说“Uncaught TypeError: Cannot read property 'getAccessor' of undefined”(String(jQuery.jgrid.getAccessor(this,'idcveconfig')).toUpperCase().substr(0,3) == String("307" ).toUpperCase())"
-
我将获得一个有效的演示设置并在明天分享。
-
@BobbyKing:我无法在免费的 jqGrid 中重现该问题。 jqGrid 需要在当前实现中使用 global
jQuery,但它会在你的代码中设置。所以可能是其他问题,提供相应demo后才能发现。