当前位置:  开发笔记 > 编程语言 > 正文

jqGrid(删除行) - 如何发送其他POST数据?

如何解决《jqGrid(删除行)-如何发送其他POST数据?》经验,为你挑选了2个好方法。

我遇到了jqGrid删除机制的问题,因为它只以POST数据的形式发送"oper"和"id"参数(id是表的主键).

问题是,我需要根据id和另一个列值删除一行,比方说user_id.如何将此user_id添加到POST数据?

我可以总结一下这个问题如下:

    如何获取所选行的单元格值(user_id)?

    AND,如何将该user_id添加到POST数据中,以便可以从实际删除过程发生的后面的代码中检索它.

示例代码:

jQuery("#tags").jqGrid({
                url: "subgrid.process.php,
                editurl: "subgrid.process.php?,
                datatype: "json",
                mtype: "POST",
                colNames:['id','user_id','status_type_id'],
                colModel:[{name:'id', index:'id', width:100, editable:true},

                         {name:'user_id', index:'user_id', width:200, editable:true},

                        {name:'status_type_id', index:'status_type_id', width:200}
                ],
                pager: '#pagernav2',
                rowNum:10,
                rowList:[10,20,30,40,50,100],
                sortname: 'id',
                sortorder: "asc",
                caption: "Test",
                height: 200
        });
        jQuery("#tags").jqGrid('navGrid','#pagernav2',
            {add:true,edit:false,del:true,search:false},
        {},
             {mtype:"POST",closeAfterAdd:true,reloadAfterSubmit:true}, // add options
   {mtype:"POST",reloadAfterSubmit:true}, // del options
            {} // search options
        );

Oleg.. 18

这不成问题.有不同的方法来做你需要的.最直接的方法是使用serializeDelData功能.删除行的jqGrid代码如下所示

var ajaxOptions = $.extend({
    url: rp_ge.url ? rp_ge.url : $($t).jqGrid('getGridParam','editurl'),
    type: p.mtype,
    data: $.isFunction(p.serializeDelData) ? p.serializeDelData(postd) : postd,
    complete:function(data,Status){
        //...
    },
    error:function(xhr,st,err){
        //...
    }
}, $.jgrid.ajaxOptions, p.ajaxDelOptions);

$.ajax(ajaxOptions);

所以你可以定义你自己的serializeDelData功能,它可以满足你的需求:

{mtype:"POST", reloadAfterSubmit:true, serializeDelData: function (postdata) {
      var rowdata = jQuery('#tags').getRowData(postdata.id);
      // append postdata with any information 
      return {id: postdata.id, oper: postdata.oper, user_id: rowdata.user_id};
 }}, // del options

顺便说一句,如果你想自己生成发布到服务器的数据,只需返回一个字符串而不是一个对象.然后数据将由jQuery.ajax发布而不做任何更改.

如果您希望不在发布的数据中添加其他信息,但在URL中可以执行此操作onclickSubmit.我在服务器端使用例如RESTfull服务,并删除我使用空主体的DELETE HTTP请求的项目.所有参数都放在URL中.相应的代码如下所示:

{mtype:"DELETE", reloadAfterSubmit:true, serializeDelData: function (postdata) {
      return ""; // the body MUST be empty in DELETE HTTP requests
 }, onclickSubmit: function(rp_ge,postdata) {
      var rowdata = jQuery('#tags').getRowData(postdata.id);
       rp_ge.url = 'subgrid.process.php/' + encodeURIComponent(postdata.id) +
                   '?' + jQuery.param ({user_id: rowdata.user_id});
 }}, // del options


ravl1084.. 7

这就是我如何使用jqGrid在删除时向POST添加更多数据:

var grid = $("#grid").jqGrid(... //make your grid

$("#grid").jqGrid('navGrid', '#pager', {add:false, edit:false, del:true},
                  {},
                  {},
                  {delData: {
                             name: function() {
                                        var sel_id = grid.jqGrid('getGridParam', 'selrow');
                                        var value = grid.jqGrid('getCell', sel_id, 'colName');
                                        return value;
                                   }
                            }
                   },
                  {},
                  {});

这将返回一个post数组{id:rowNumber,oper:del,name:someValue}.name是你想如何在post数组中引用你的变量,someValue是你感兴趣的所选行的单元格中的任何内容.

希望这可以帮助!



1> Oleg..:

这不成问题.有不同的方法来做你需要的.最直接的方法是使用serializeDelData功能.删除行的jqGrid代码如下所示

var ajaxOptions = $.extend({
    url: rp_ge.url ? rp_ge.url : $($t).jqGrid('getGridParam','editurl'),
    type: p.mtype,
    data: $.isFunction(p.serializeDelData) ? p.serializeDelData(postd) : postd,
    complete:function(data,Status){
        //...
    },
    error:function(xhr,st,err){
        //...
    }
}, $.jgrid.ajaxOptions, p.ajaxDelOptions);

$.ajax(ajaxOptions);

所以你可以定义你自己的serializeDelData功能,它可以满足你的需求:

{mtype:"POST", reloadAfterSubmit:true, serializeDelData: function (postdata) {
      var rowdata = jQuery('#tags').getRowData(postdata.id);
      // append postdata with any information 
      return {id: postdata.id, oper: postdata.oper, user_id: rowdata.user_id};
 }}, // del options

顺便说一句,如果你想自己生成发布到服务器的数据,只需返回一个字符串而不是一个对象.然后数据将由jQuery.ajax发布而不做任何更改.

如果您希望不在发布的数据中添加其他信息,但在URL中可以执行此操作onclickSubmit.我在服务器端使用例如RESTfull服务,并删除我使用空主体的DELETE HTTP请求的项目.所有参数都放在URL中.相应的代码如下所示:

{mtype:"DELETE", reloadAfterSubmit:true, serializeDelData: function (postdata) {
      return ""; // the body MUST be empty in DELETE HTTP requests
 }, onclickSubmit: function(rp_ge,postdata) {
      var rowdata = jQuery('#tags').getRowData(postdata.id);
       rp_ge.url = 'subgrid.process.php/' + encodeURIComponent(postdata.id) +
                   '?' + jQuery.param ({user_id: rowdata.user_id});
 }}, // del options



2> ravl1084..:

这就是我如何使用jqGrid在删除时向POST添加更多数据:

var grid = $("#grid").jqGrid(... //make your grid

$("#grid").jqGrid('navGrid', '#pager', {add:false, edit:false, del:true},
                  {},
                  {},
                  {delData: {
                             name: function() {
                                        var sel_id = grid.jqGrid('getGridParam', 'selrow');
                                        var value = grid.jqGrid('getCell', sel_id, 'colName');
                                        return value;
                                   }
                            }
                   },
                  {},
                  {});

这将返回一个post数组{id:rowNumber,oper:del,name:someValue}.name是你想如何在post数组中引用你的变量,someValue是你感兴趣的所选行的单元格中的任何内容.

希望这可以帮助!

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有