Jquery plugins (jqGrid)将额外的自定义参数发布到服务器

Jquery plugins (jqGrid)将额外的自定义参数发布到服务器,jquery-plugins,jqgrid,jqgrid-php,Jquery Plugins,Jqgrid,Jqgrid Php,我的HTML页面上有两个网格。 当我单击一个网格中的一行时,它需要根据所选行将数据加载到另一个网格中 因此,我需要将rowId作为第二个网格的额外参数发送。。我不知道怎么做 (我不想使用子网格功能)如果选择“高级”,然后选择“主细节”,您可以在上找到此场景的示例。我在下面包含了代码的一个小变体 让我们在HTML页面上有两个网格:一个是“主”网格,另一个是“细节”网格,它需要根据所选行将数据加载到主网格中。让我们两个网格都必须填充来自以JSON格式发回数据的服务器的数据。我们假设在主网格中使用单行

我的HTML页面上有两个网格。 当我单击一个网格中的一行时,它需要根据所选行将数据加载到另一个网格中

因此,我需要将rowId作为第二个网格的额外参数发送。。我不知道怎么做


(我不想使用子网格功能)

如果选择“高级”,然后选择“主细节”,您可以在上找到此场景的示例。我在下面包含了代码的一个小变体

让我们在HTML页面上有两个网格:一个是“主”网格,另一个是“细节”网格,它需要根据所选行将数据加载到主网格中。让我们两个网格都必须填充来自以JSON格式发回数据的服务器的数据。我们假设在主网格中使用单行选择(没有定义
multiselect:true

这是代码模板

var detailsTitle = 'Details';
var grid = jQuery('#master').jqGrid({ // ... some parameters
    url: masaterUrl,
    datatype: 'json',
    colModel: [ // ... some column definitions
        { name: 'Name', width: 120 }
    ],
    onSelectRow: function(id) {
        var selName = grid.getCell(id, 'Name');
        gridDetails.setCaption(detailsTitle + ' for "' + selName + '"');
        gridDetails.setGridParam({
            //url: urlGetDetail + '/' + encodeURIComponent(id),
            //url: urlGetDetail + '?' + $.param( { userId: id });
            postData: { userId: id },
            page: 1,
            datatype: 'json' }).trigger('reloadGrid');
    }
}).navGrid('#pager', {}, {}, {}, {
    afterSubmit: function(response, postdata) {
        gridDetails.setCaption(detailsTitle);
        gridDetails.setGridParam({ datatype: 'local',
                                   page: 1 }).trigger('reloadGrid');
        return [true, ''];
    }
});

var gridDetails = jQuery('#detail').jqGrid({ // ...
    caption: detailsTitle,
    url: urlDetail,
    //postData: { userId: function() { return grid.getGridParam('selrow'); } },
    datatype: 'local'
});
现在对代码进行一些注释。在开始时,不会在主栅格中选择任何行。因此,我们将
datatype:'local'
设置为details grid的参数,以拒绝和加载数据

如果将选择主网格中的一行,我们将设置详细信息网格的标题(标题),将详细信息网格的
数据类型更改为
'json'
,并设置
页面:1
。重置
页面
参数很重要,因为它将作为附加参数发送到服务器。如果在最后一次选择中,用户选择了新选择之前的另一个页面,并且对于新选择,没有像之前那样多的datails行,则详细信息网格可能为空。要解决此问题,应将“始终
page
设置为1

现在主要工作是:发送主网格的
id
,作为服务器请求细节网格的参数。我们在这里有一些选择:

  • 我们可以使用类似于
    '?userId='+id
    的字符串附加详细信息网格的url。为了更仔细地执行此操作,我们应该考虑到
    id
    可以有一些特殊字符。因此,为了确保我们应该使用
    ”?userId='+encodeURIComponent(id)
    。函数
    jQuery.param
    以更可读的形式执行同样的操作。因此,我们可以使用
    “?”+jQuery.param({userId:id})
    。如果详细信息网格的
    url
    应该是REST格式(比如“blabla/id”),我建议使用这种方式。在这种情况下,将详细信息网格的
    url
    设置为
    urldeail+'/'+encodeURIComponent(id)
    可能是最好的方法
  • 我们可以设置参数
    postData:{userId:id}
    。如果我们对服务器的请求使用HTTPGET,那么它与
    “?”+jQuery.param({userId:id})
    相同。这种方式的优点是我们还使用HTTPPOST。然后参数将被发布到主体中,而不是附加到URL中。因此,使用
    postData
    有一个小优势
  • 我们可以从主网格的
    onsetrow
    事件中删除代码,并在细节网格中包含一个附加参数
    postData
    ,作为一个函数(参见注释行)。这种方法将非常有效,只有少数例外。例如,如果主网格中的选定行将被删除,我们将很难清除详细信息网格。在其他一些情况下,我们的灵活性也较低。所以我只想提到这个可能性,但我只是把它作为一个评论(看看你是否对这种方式感兴趣)