来自Web2py的JQGrid和JSON数据

来自Web2py的JQGrid和JSON数据,json,jqgrid,web2py,Json,Jqgrid,Web2py,Q1.json正在运行index.json。但是我不能在jqgrid中显示。我认为colmodel名称是问题所在。是否要求colmodel名称来自数据库字段?我想在jqgrid中显示的是我的select语句,这些变量来自不同的表。不仅有一张桌子,还有三张桌子 Q2.同一行应显示在jqgrid中,但来自不同的表。可能吗 <script type="text/javascript"> jQuery(document).ready(function(){ jQuery("#list"

Q1.json正在运行index.json。但是我不能在jqgrid中显示。我认为colmodel名称是问题所在。是否要求colmodel名称来自数据库字段?我想在jqgrid中显示的是我的select语句,这些变量来自不同的表。不仅有一张桌子,还有三张桌子

Q2.同一行应显示在jqgrid中,但来自不同的表。可能吗

<script type="text/javascript">
jQuery(document).ready(function(){ 
  jQuery("#list").jqGrid({

    url:'{{=URL(r=request,f='call',args=['json','index'])}}',
      data: "{}",
    datatype: 'json',
    mtype: 'GET',
      contentType: "application/json; charset=utf-8",
      complete: function(jsondata, stat) {
        if (stat == "success") {
            var thegrid = jQuery("#list")[0];
            thegrid.addJSONData(JSON.parse(jsondata.responseText).d);
        }
    }, 
    colNames:['code','name','max','min','quantity','amount'],
    colModel :[ 
      {name:CODE',index:'CODE', width:55}, 
      {name:'Name', index:'Name',width:100}, 
      {name:'MAX(table2.hour)', index:'MAX(hour)',width:100},
      {name:'MIN(tabl2.hour)', index:'MIN(hour)',width:100}, 
      {name:'SUM(quantity)', index:'SUM(quantity)',width:180}, 
      {name:'SUM(amount)', index:'SUM(amount)',width:180}
    ],
    hidegrid: false,
    scrollOffset:0,
    pager: '#pager',
    rowNum:100,
    shrinkToFit:false,
    //rowList:[10,20,30,50],
    //sortname: 'id',
   //sortorder: 'desc',
    viewrecords: false,
    width: "100%",
    height: "100%",
    caption: 'SALES Grid'
  }); 


}); 
</script>
{行:[0,{表1:{Name:dyon},{额外:{MAXtable2.hour:20130514214301484,MINtable2.hour:20130514052610093,SUMtable2.quantity:2115.854,SUMtable2.amount:90089.15},表3:{代码:1800}]


注意:我只想在一个页面中显示数据。当我运行index.html时,它包含行,但它是空的,有一行每个单元格包含0。当我运行index.json时,它包含我需要的数据。我是python的新手。谢谢

第一个问题是您使用了jqGrid的许多不存在的选项,请参见:data、contentType、complete。您可以删除这些选项,或者使用其他一些选项来执行您可能尝试执行的操作

第二个问题是JSON输入中属性的使用,其中包含点,例如SUMtable2.quantity。为了能够读取这些属性,您必须将jsonmap定义为函数。比如说

jsonmap:functionobj{ 返回对象(额外[汇总表2.数量]; } 因为JSON数据的第一个元素是0,所以必须将上面的代码修改为类似这样的内容

jsonmap: function (obj) {
    return typeof obj === "object"? obj._extra["SUM(table2.quantity)"]: "";
}
演示结果:

最好是修复服务器代码,从行数组中删除不需要的0项。如果无法在服务器端执行此操作,则可以在beforeProcessing回调中的客户端执行此操作

显示

它使用以下JavaScript代码

$("#list").jqGrid({
    url: "CrazyGirl.json", // need be changed to youth
    datatype: "json",
    ajaxGridOptions: { contentType: "application/json" },
    serializeGridData: function (data) {
        return JSON.stringify({}); // send empty object (???)
    },
    colNames: ["code", "name", "max", "min", "quantity", "amount"],
    colModel: [
        {name: "code", width: 55, jsonmap: "table3.CODE"},
        {name: "name", width: 100, jsonmap: "table1.Name"},
        {name: "max", width: 120,
            jsonmap: function (obj) {
                return typeof obj === "object"? obj._extra["MAX(table2.hour)"]: "";
            }},
        {name: "min", width: 120,
            jsonmap: function (obj) {
                return typeof obj === "object"? obj._extra["MIN(table2.hour)"]: "";
            }},
        {name: "quantity", width: 100,
            jsonmap: function (obj) {
                return typeof obj === "object"? obj._extra["SUM(table2.quantity)"]: "";
            }},
        {name: "amount", width: 100,
            jsonmap: function (obj) {
                return typeof obj === "object"? obj._extra["SUM(table2.amount)"]: "";
            }}
    ],
    jsonReader: { repeatitems: false },
    hidegrid: false,
    pager: "#pager",
    rowNum: 1000,
    shrinkToFit: false,
    height: "100%",
    caption: "SALES Grid"
  });

您写道服务器返回JSON数据,但不发布数据示例。您写道,您假设您在colModel中有问题,但没有发布colModel。哪个数据库字段有数据库表并不重要,重要的是从服务器返回JSON响应中的哪些数据。你能用创建jqGrid的JavaScript代码和JSON响应示例来附加问题的文本吗。你可以使用IE/Chrome的浏览器或开发工具来捕获完整的HTTP流量。我编辑了这个问题,谢谢!嗨,奥列格!它起作用了!但我没有用它来换钱。我帮助我了解jqgrid。你太棒了!谢谢