2010-05-14 104 views
14

我有jqGrid刪除機制的問題,因爲它只發送POST數據(id是表的主鍵)的形式「oper」和「id」參數。jqGrid(刪除行) - 如何發送額外的POST數據?

問題是,我需要刪除一個基於id和另一列值的行,讓我們說user_id。如何將此user_id添加到POST數據?

我可以總結這個問題,如下所示:

  1. 如何獲得所選行的單元格值(USER_ID)?
  2. 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 
     ); 

回答

0

我有同樣的問題。我修正它的方法是將user_id作爲我的jsondata中的第一列。並與jqgrid的jsonreader設置,你可以完成它的工作。

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data

瀏覽一下jsondata的jsonreader設置。

我使用:

jsonReader: { cell: "", id: "0" } 

,我的數據是一樣

{ totalpages: "xxx", currpage: "yyy", totalrecords: "zzz", 
    invdata : [ 
    {"userid","cell12", "cell13", "cell14"}, 
    {"userid","cell22", "cell23", "cell24"}, 
    ... 
    ] 
} 

,現在如果我更新的行或刪除行,我會得到用戶ID。 希望這可以爲你工作!

+0

對不起,但問題不在於獲取數據,而是在**從jqGrid中刪除行中的**時發佈其他信息。一個需要沒有一個用戶標識符,但是兩個id:id和user_id。 – Oleg 2010-05-14 12:32:10

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 
+0

謝謝。 jQuery的( '#標籤')getRowData(postdata.id)。正是我所期待的。 – 2010-06-04 06:34:55

+0

當我在網格的每一行上放置一個刪除按鈕時,我嘗試了這種方法 - 它在第一次點擊刪除時有效,但隨後每次刪除都使用與第一次點擊相同的網址。我修改了代碼以擺脫「onclickSubmit」覆蓋,而是將適當的url直接傳遞給delGridRow方法(而不是設置rp_ge.url),並且它工作正常。 – 2010-10-18 14:58:29

+0

@ jrnail23:可能取決於'recreateForm'選項的用法。我有'recreateForm:true'作爲我的默認設置。您可以嘗試將此選項一起添加到'mtype:「DELETE」,reloadAfterSubmit:true,...'。 – Oleg 2010-10-18 15:36:00

0

我不知道如何發佈額外的數據,但你可以嘗試發送額外的數據作爲查詢字符串參數刪除的URL的一部分。

6

我這是怎麼得的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; 
            } 
          } 
        }, 
        {}, 
        {}); 

這將返回後數組{ID:ROWNUMBER,OPER:刪除,名稱:someValue中}。 name是您想要在後期數組中引用您的變量的方式,someValue是您感興趣的所選行中的單元格中的任何內容。

希望這會有所幫助!

0

是的,你可以添加額外的數據navgrid的德爾參數下使用onclickSubmit事件POSTDATA,在你的情況,如果你想發送USER_ID包括身份證,不是做這樣的事情

$("#gridId").jqGrid({ 
    }).hideCol(['']).navGrid('#pagerId', { 
     edit: false, add: false, del: true, search: true, refresh: true, beforeRefresh: function() { 
     }, afterRefresh: function() { 
     } 
    }, {}, {}, { 
     afterComplete: function() { 
     }, onclickSubmit: function (params) { 
      var extraParameters = []; var arraySelected = $("#gridId").jqGrid('getGridParam', 'selarrrow'); 
      for (var i = 0; i < arraySelected.length; i++) { 
       extraParameters.push($('#gridId').getRowData(arraySelected[i]).user_id) 
      } 
      return { extraParams: extraParameters.join(',') }; 
     } 
    }, 
    { 
     sopt: ['cn', 'nc'], onSearch: function() { 
     }, 
     onReset: function() { 
     } 
    }); 
1

這可以很容易實現如果設置鍵:在真正 colModel這樣的:

colModel: [ {name: 'childId', index: 'childId', align: 'center', sorttype: 'string', key:true},

做塔t會在POST期間自動發送該字段。

關鍵的意圖:真正colModel只是允許命令處理器上的索引記錄集正常運行。

+0

通過設置鍵:true,它只將值作爲_id發送。您無法使用它發送其他字段數據。 – 2018-03-08 20:03:46