【问题标题】:jqgrid with JSON input rendering empty带有 JSON 输入的 jqgrid 呈现为空
【发布时间】:2010-03-09 16:57:44
【问题描述】:

我正在尝试生成一个 jqgrid,它从 JSON 提要填充,从 django 后端输出。

处理请求的python如下:

from django.http import HttpResponse
from django.utils import simplejson
def json_test(request):
    results = {'total':'1',
               'page':'1',
               'records':'2',
               'rows':[{'id':'1','field1':'blah','field2':'bleh'},
            {'id':'2','field1':'bloo','field2':'blum'}]}
    json = simplejson.dumps(results)
    return HttpResponse(json, mimetype='application/json')

所以转到http://127.0.0.1:8000/json_test/ 会返回以下内容:

{"records": "2", "total": "1", "rows": [{"field2": "bleh", "field1": "blah", "id": "1"}, {"field2": "blum", "field1": "bloo", "id": "2"}], "page": "1"}

jquery代码如下:

<script type="text/javascript">
jQuery(document).ready(function(){ 
  jQuery("#list").jqGrid({
    url:'http://127.0.0.1:8000/json_test/',
    datatype: 'json',
    mtype: 'GET',
    colNames:['field1','field2'],
    colModel :[ 
      {name:'field1', width:55}, 
      {name:'field2', width:90}, 

    ],
    pager: '#pager',
    rowNum:10,
    rowList:[10,20],
    sortname: 'field1',
    sortorder: 'desc',
    viewrecords: true,
    caption: 'Test Grid'
  }); 
}); 
</script>

加载页面时,网格正确呈现,并短暂显示“加载数据”,但随后不显示任何行。

任何想法我哪里出错了?我试图将其简化为一个尽可能简单的案例来确定原因。

【问题讨论】:

  • firebug没有错误,显示json文件23ms返回成功

标签: django json jqgrid


【解决方案1】:

根据jqGrid Documentation,默认情况下,网格需要以下格式的 JSON 数据:

{ total: "xxx", page: "yyy", records: "zzz", rows : [ {id:"1", cell:["cell11", "cell12", "cell13"]}, {id:"2", cell:["cell21", "cell22", "cell23"]}, ... ] }

所以基本上看起来您需要为每个列设置一个 ID。如果这不可行,您需要指定自己的 jsonReader。

此外,您的总/页面/记录部分乱序可能会导致问题 - 如果您在添加 ID 后仍然遇到问题,那么这将是接下来要查看的内容。

【讨论】:

  • 我已经在 ids 中添加了(编辑代码以反映这一点),但仍然没有乐趣。如何强制 python 按编码顺序返回 JSON?
  • 这只是一个观察,我不确定它是否会引起问题。作为一个快速测试,只需以正确的顺序返回一个硬编码的字符串,看看是否能解决问题。然后可以制定解决方案。
【解决方案2】:

已解决 - 我将 html 页面放在 django 应用程序中,这样 jqgrid url 就变成了 url:'/json_test/',然后它就可以工作了。必须是硬编码到 jqgrid 中的只允许本地 url 的东西?

【讨论】:

    【解决方案3】:

    试试这个...

    loadError: function(xhr,status,error){alert(status+" "+error);}

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 2023-04-02
      • 1970-01-01
      • 2011-10-14
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多