【问题标题】:JQGrid and JSON data from Web2py来自 Web2py 的 JQGrid 和 JSON 数据
【发布时间】:2013-07-24 23:51:03
【问题描述】:

Q1.json 正在工作 (index.json)。但我无法在 jqgrid 中显示。我认为 colmodel 名称是问题。是否要求 colModel 名称来自数据库字段?我想在 jqgrid 中显示来自我的选择语句,而这些变量来自不同的表。不只是一张桌子,而是三张桌子。

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>

{"rows": [0, {"table1": {"Name": "dyon"}, "_extra": {"MAX(table2.hour)": "20130514214301484", "MIN(table2.hour )": "20130514052610093", "SUM(table2.quantity)": 2115.854, "SUM(table2.amount)": 90089.15}, "table3": {"CODE": 1800}}]}

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

【问题讨论】:

  • 你写的是服务器返回JSON数据,但不要贴出数据的例子。您写道您认为您在colModel 中有问题,但也没有发布colModel。哪个数据库字段具有数据库表并不重要,重要的是您在服务器的 JSON 响应中返回哪些数据。您能否使用创建 jqGrid 的 JavaScript 代码和 JSON 响应示例附加您的问题文本。您可以使用FiddlerFirebug 或 IE/Chrome 的开发者工具来捕获完整的 HTTP 流量。
  • 我编辑了这个问题,谢谢!

标签: json jqgrid web2py


【解决方案1】:

第一个问题是您使用了许多不存在的 jqGrid 选项(请参阅the documentation):datacontentTypecomplete。您删除选项或使用其他一些选项来执行您可能尝试执行的操作。

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

jsonmap: function (obj) {
    return obj._extra["SUM(table2.quantity)"];
}

因为 JSON 数据将 0 作为第一个元素,您必须将上述代码修复为类似

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

The first demo展示结果:

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

The demo 显示

它使用以下 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"
  });

【讨论】:

  • 嗨,奥列格!有用!但我没有用它来做一些改变。我帮助我了解 jqgrid。你很棒!谢谢!
猜你喜欢
  • 2018-05-09
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 2018-02-06
  • 2012-12-16
相关资源
最近更新 更多