Jquery plugins (jqGrid)将额外的自定义参数发布到服务器
我的HTML页面上有两个网格。 当我单击一个网格中的一行时,它需要根据所选行将数据加载到另一个网格中 因此,我需要将rowId作为第二个网格的额外参数发送。。我不知道怎么做Jquery plugins (jqGrid)将额外的自定义参数发布到服务器,jquery-plugins,jqgrid,jqgrid-php,Jquery Plugins,Jqgrid,Jqgrid Php,我的HTML页面上有两个网格。 当我单击一个网格中的一行时,它需要根据所选行将数据加载到另一个网格中 因此,我需要将rowId作为第二个网格的额外参数发送。。我不知道怎么做 (我不想使用子网格功能)如果选择“高级”,然后选择“主细节”,您可以在上找到此场景的示例。我在下面包含了代码的一个小变体 让我们在HTML页面上有两个网格:一个是“主”网格,另一个是“细节”网格,它需要根据所选行将数据加载到主网格中。让我们两个网格都必须填充来自以JSON格式发回数据的服务器的数据。我们假设在主网格中使用单行
(我不想使用子网格功能)如果选择“高级”,然后选择“主细节”,您可以在上找到此场景的示例。我在下面包含了代码的一个小变体 让我们在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
,作为一个函数(参见注释行)。这种方法将非常有效,只有少数例外。例如,如果主网格中的选定行将被删除,我们将很难清除详细信息网格。在其他一些情况下,我们的灵活性也较低。所以我只想提到这个可能性,但我只是把它作为一个评论(看看你是否对这种方式感兴趣)