问题描述
这两天研究jqgrid,我用的jsp,用local方式能正常显示出来,但换成json形式就不行了<%@ page pageEncoding="UTF-8" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jqGrid Demos</title> <link rel="stylesheet" type="text/css" media="screen" href="<%=application.getContextPath()%>/resources/jqcss/jquery-ui-1.8.12.custom.css" /> <link rel="stylesheet" type="text/css" media="screen" href="<%=application.getContextPath()%>/resources/jqcss/ui.jqgrid.css" /> <link rel="stylesheet" type="text/css" media="screen" href="<%=application.getContextPath()%>/resources/jqcss/ui.multiselect.css" /> <script src="<%=application.getContextPath()%>/resources/js/jquery-1.4.2.min.js" type="text/javascript" ></script> <script src="<%=application.getContextPath()%>/resources/jqgrid/grid.locale-cn.js" type="text/javascript"></script> <script type="text/javascript"> $.jgrid.no_legacy_api = true; $.jgrid.useJSON = true; </script> <script src="<%=application.getContextPath()%>/resources/jqgrid/jquery.jqGrid.min.js" type="text/javascript"></script> <script src="<%=application.getContextPath()%>/resources/jqgrid/jquery-ui-1.8.12.custom.min.js" type="text/javascript"></script> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery("#list4").jqGrid({ datatype: "local", height: 250, colNames:['序号','日期', '姓名', '数量A','数量B','总和','备注'], colModel:[ {name:'id',index:'id', width:30, sorttype:"int"}, {name:'invdate',index:'invdate', width:90, sorttype:"date"}, {name:'name',index:'name', width:100}, {name:'amount',index:'amount', width:80, align:"right",sorttype:"float"}, {name:'tax',index:'tax', width:80, align:"right",sorttype:"float"}, {name:'total',index:'total', width:80,align:"right",sorttype:"float"}, {name:'note',index:'note', width:150, sortable:false} ], rowNum:4, rowList:[4,8,12], pager: '#pager2', multiselect: true, caption: "Manipulating Array Data" }); var mydata = [ {id:"1",invdate:"2007-10-01",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"}, {id:"2",invdate:"2007-10-02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"}, {id:"3",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"}, {id:"4",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"}, {id:"5",invdate:"2007-10-05",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"}, {id:"6",invdate:"2007-09-06",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"}, {id:"7",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"}, {id:"8",invdate:"2007-10-03",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"}, {id:"9",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"} ]; for(var i=0;i<=mydata.length;i++){ jQuery("#list4").jqGrid('addRowData',i+1,mydata[i]); } }); </script></head><body> <table id="list4"></table> <div id="pager2"></div></body>把mydate改成从后台获取也可以var mydata = ${list};listpublic void onLoad(Map request, Map session) { StringBuilder sb = new StringBuilder(); sb.append("[{id:").append('"').append("1").append('"') .append(",invdate:").append('"').append("2007-10-01").append('"') .append(",name:").append('"').append("test").append('"') .append(",note:").append('"').append("note").append('"') .append(",amount:").append('"').append("200.00").append('"') .append(",tax:").append('"').append("10.00").append('"') .append(",total:").append('"').append("210.00").append('"') .append("}]") ; request.put("list", sb.toString()); }但是把datatype换成json就不行,返回的json格式数据我试了各种版本,但就是不行。不知有人碰到过类似问题没有 问题补充:chengjiang_lin 写道
解决方案
这个可能的问题是你即时写了返回类型是json格式,但是jQGrid插件本身并未根据返回的类型Type来做处理,也即使把你返回的json格式的数据格式做json方式处理。不过可以有个折中的方法来做,就是把你从服务器端返回的数据(json格式)使用eval,json=eval(json);这样子,使服务器返回的数据流转换成Json(Object),而不是Json(String),然后把你转换成的Json(Object)传入你的jQGrid,应该就可以了
解决方案二:
http://www.trirand.com/blog/jqgrid/jqgrid.html看上面的例子,然后输入:http://www.trirand.com/blog/jqgrid/server.php?q=2&page=2&rows=20可以看返回的json的格式,原因就在于json各项和值需要用引号引起来。参考:http://www.cnblogs.com/oilsun/archive/2012/06/27/2565852.htmljquery从1.4开始,对json数据格式要求很严格,不允许使用''单引号,必须使用""双引号。也就是说,不能不引起来,必须用双引号引起来。
解决方案三:
我也碰到相同的问题,正在解决之中。
解决方案四:
我承认我的意思就是3楼说的,好吧我没说详细。所以让你看看你的数据到底是个啥,我以前有返回过,字符串格式的,还是自己写个方法来解析。
解决方案五:
JSP跟JQGRID两码事....
解决方案六:
用FF添加监控,看看到底是什么格式。