从JSON数据设置JqGrid colNames和colModel

时间:2010-07-22 12:34:32

标签: json jqgrid

我正在尝试在服务器上生成列名列表和列模型,并将其提供给JqGrid。 我已成功生成JSON并通过XHR将其传递给客户端,没有任何投诉。但是,网格本身并没有出现。我看到网格的一列,顶部有网格的折叠/展开按钮。

这是javascript调用:

var col_names = [];
var col_model = [];
...
...

jQuery(document).ready(function() {
  //XHR to get col_names and col_model
  $.ajax({url: 'http://localhost:8080/metadata',
          success: function(data) {
            col_names = data.names;
            col_model = data.model;
          }
  });
jQuery("#list").jqGrid({
    url:'http://localhost:8080:/data?level=0',
    datatype: 'json',
    mtype: 'GET',
    colNames: col_names,
    colModel: col_model,
    ...
    ...

这是JSON:

{
    "model": [{"index": "pid", "name": "pid"},
              {"index": "p1", "name": "p1"},
              {"index": "p2", "name": "p2"}],
    "names": ["PID", "P1", "P2"]
}

如果我对colModel进行硬编码,则会显示网格。 顺便说一下,在响应头中,content-type设置为“application / json”。

TIA

1 个答案:

答案 0 :(得分:3)

在您发布的代码中,您将在AJAX调用完成之前初始化jqGrid:

jQuery(document).ready(function() {
  //XHR to get col_names and col_model
  $.ajax({url: 'http://localhost:8080/metadata',
          success: function(data) {
            col_names = data.names;
            col_model = data.model;
         }
 });
jQuery("#list").jqGrid({
...

您需要在success功能中重新定位jqGrid代码,或在调用async时将$.ajax选项设置为false。

当AJAX调用处于挂起状态时,您可以在页面上显示微调器等以保持用户占用。