jqGrid:子网格不';不能用数据填充

jqGrid:子网格不';不能用数据填充,jqgrid,subgrid,Jqgrid,Subgrid,我有一个子网格,当您单击“Cheese”旁边的“+”符号时,ajax查询将启动,我看到了子网格的列名,但实际数据没有填充到子网格中。无论我尝试扩展哪个网格,问题都会发生,但“奶酪”示例如下所示 您可以在屏幕截图中FireBug输出的底部看到XML响应。我已经通读了XML,它看起来是有效的。凭直觉,我还将XML输出粘贴到了中,它的缩进似乎很好。最重要的是,我还让ajax调用返回一些非常基本的值,无论我到目前为止尝试了什么,网格仍然是空的 您应该在子网格中看到: -----------------

我有一个子网格,当您单击“Cheese”旁边的“+”符号时,ajax查询将启动,我看到了子网格的列名,但实际数据没有填充到子网格中。无论我尝试扩展哪个网格,问题都会发生,但“奶酪”示例如下所示

您可以在屏幕截图中FireBug输出的底部看到XML响应。我已经通读了XML,它看起来是有效的。凭直觉,我还将XML输出粘贴到了中,它的缩进似乎很好。最重要的是,我还让ajax调用返回一些非常基本的值,无论我到目前为止尝试了什么,网格仍然是空的

您应该在子网格中看到:

------------------------------------------------------
|Translations                    | Language | Active |
------------------------------------------------------
| It's cheesy goodness           |   EN     |   No   |
| fromage                        |   FR     |   No   | 
|                                |   DE     |   N/A  |   <-- "N/A" means there's no translation of "cheese" in German, currently in the database

    ... etc., with all supported languages listed.
$("#translationsList").jqGrid({
    caption : "Translations",
    datatype : "xml",
    url : translationsFeed,
    editurl : translationsEdit,
    mtype : "get",
    pager : "#translationsPager",
    rowNum : 20,
    autowidth : true,
    sortname : "phrase",
    sortorder : "asc",
    viewrecords : true,
    multiselect : false,
    hidegrid : false,
    height : 300,
    altRows : true,
    rownumbers : true,
    toolbar : [false],
    colNames : ["phrase_id", "translation_id", "language_cd", "Phrase", "Translation", "Created", "Modified", "Active"],
    colModel : [
            { name : "phrase_id",                                   index : "phrase_id",            sortable : true,    search : false, editable : true,    edittype : "text",      editrules: { edithidden :true },                                    hidden : true},
            { name : "translation_id",                          index : "translation_id", sortable : false, search : false, editable : true,    edittype : "text",      editrules: { edithidden :true },                                    hidden : true},
            { name : "language_cd",                                 index : "language_cd",      sortable : true,    search : true,  editable : true,    edittype : "text",      editrules: { edithidden: true, required : true }, hidden : true },
        { name : "Phrase",              width:200,  index : "phrase",               sortable : true,    search : true,  editable : true,    edittype : "text",      editrules: { required : true } },
        { name : "Translation",         width:200,  index : "translation",      sortable : true,    search : true,  editable : true,    edittype : "text",      editrules: { required : false } },
        { name : "Created",             width:100,  index : "modify_dt",            sortable : true,    search : true },
        { name : "Modified",            width:100,  index : "create_dt",            sortable : true,    search : true },
        { name : "Active",              width:20,       index : "active",               sortable : true,    search : true,  editable : true,    edittype : "select",    editoptions:{value:"0:No;1:Yes"} }
    ],
    onSelectRow: function(id) {
            jQuery('#translationsList').editRow(id, true);
    },
    subGrid: true,
    subGridUrl: 'ajax/translations_subgrid_feed.php',
    subgridtype: 'xml',
    subGridModel : [{
      name      : ['Translations', 'Language', 'Active'],
      width     : [583, 70, 80],
      align     : ['left','right','right'],
      params    : ['phrase_id']
    }],
  subGridOptions: {
    plusicon : "ui-icon-plus",
    minusicon : "ui-icon-minus",
    openicon: "ui-icon-carat-1-sw",
    expandOnLoad: true,
    selectOnExpand : false,
    reloadOnExpand : true
  }
});

主/子网格的XML响应可以在

中找到,我可以重现问题并分析jqGrid子网格模块的代码。我的解释是:您使用的新的
expandOnLoad:true
属性只能在主网格上的“local”数据类型下工作。我没有在文档中找到关于这一点的相应注释,但事实确实如此

在4.1版中,使用了
delayOnLoad
选项,但它不能正常工作。在版本4.1.1中,在不使用该选项之后,以及在主网格中添加行之后。问题在于,如果前一个ajax请求的响应直到最后才被处理,jqGrid使用
.grid.hDiv.load
属性跳过ajax请求。在
$的
beforeSend
处理程序内部,将调用主网格(请参阅)的ajax
请求的第一行

ts.grid.hDiv.loading = true;
然后在
$.ajax
请求的处理程序内部调用该方法,该方法调用主网格的每一行,并调用网格行的“展开”图标。因此,在
成功
处理程序
结束时,
.grid.hDiv.loading
将被更改为
false
内部之前,将在所有网格行上调用。因此,在方法的相应部分,将测试
ts.grid.hDiv.loading
,相应的
$。ajax
调用将被跳过行将不展开


因此,我可以重复我分析的简短结果:不要使用
expandOnLoad:true
选项。远程数据不起作用。

我可以重现这个问题,并分析jqGrid子网格模块的代码。我的解释是:您使用的新的
expandOnLoad:true
属性只能在主网格上的“local”数据类型下工作。我没有在文档中找到关于这一点的相应注释,但事实确实如此

在4.1版中,使用了
delayOnLoad
选项,但它不能正常工作。在版本4.1.1中,在不使用该选项之后,以及在主网格中添加行之后。问题在于,如果前一个ajax请求的响应直到最后才被处理,jqGrid使用
.grid.hDiv.load
属性跳过ajax请求。在
$的
beforeSend
处理程序内部,将调用主网格(请参阅)的ajax
请求的第一行

ts.grid.hDiv.loading = true;
然后在
$.ajax
请求的处理程序内部调用该方法,该方法调用主网格的每一行,并调用网格行的“展开”图标。因此,在
成功
处理程序
结束时,
.grid.hDiv.loading
将被更改为
false
内部之前,将在所有网格行上调用。因此,在方法的相应部分,将测试
ts.grid.hDiv.loading
,相应的
$。ajax
调用将被跳过行将不展开


因此,我可以重复我分析的简短结果:不要使用
expandOnLoad:true
选项。它对远程数据不起作用。

你能在点击“奶酪”后发布来自
translationsFeed
URL的XML响应和子网格“ajax/translations\u subgrid\u feed.php”的XML响应吗?基于图片输入XML不是一件好工作。拥有这两种XML可以很容易地重现您的问题。当然:我还将其添加到了问题的末尾。您能否在点击“奶酪”后发布子网格“ajax/translations\u subgrid\u feed.php”的
translationsFeed
URL的XML响应和子网格“ajax/translations\u subgrid\u feed.php”的XML响应?基于图片输入XML不是一件好工作。拥有这两个XML可以很容易地重现您的问题。当然:我还将其添加到了问题的末尾。因此,我从中得出的结论是:(1)不要对远程数据使用“expandOnLoad:true”(我已将其更改为false),以及(2)确保我使用的是最新版本的jqGrid。这两个步骤加在一起没有导致任何变化。你能发布你的工作代码样本吗,这样我就可以把它和我得到的进行比较了?谢谢你花时间来研究这件事@正常人:没问题。看,嗯,我一定还有别的问题。我修改了我的页面以匹配您的页面,但仍然存在相同的问题。然后,我创建了一个新页面,其中包含与您的页面完全相同的HTML,并调整了我的网格/子网格URL以指向我的文件,但我仍然存在同样的问题。我还将我的jqGrid代码与您的代码进行了逐行比较,但仍然没有成功。但是,您发布的代码/页面示例工作得非常好。接下来我要做的就是复制您的XML文件,并再次进行测试。好的,我的XML或发送响应的方式似乎有问题。我插入了子网格的XML文件,答对了!因此,我从中得出的结论是:(1)不要对远程数据使用“expandOnLoad:true”(我已将其更改为false),以及(2)确保我使用的是最新版本的jqGrid。这两个步骤加在一起没有产生任何效果