2013-02-12 123 views
0

jqGrid的文檔指出以下有關POSTDATA:editData如何工作?

用於將內容添加到發佈到服務器

數據的數組就是這樣。所以,我使用postData發送一個變量到我的PHP,這樣我就可以使用開關大小寫來調用我想要的函數。

這使我可以擁有一個包含我的項目所有功能的PHP頁面。我想用editData做同樣的事情,所以我不需要爲與項目關聯的每個內嵌編輯函數都設置一個PHP頁面。

但是,editData似乎沒有傳遞到PHP頁面。我試圖將POST的變量打印到一個文件,它們是空的。建議?

注:我知道了editData錯誤的,但這應該已經得到修復4.4.4版本,這是我使用

$("#list").jqGrid({ 
    url:'functions.php', 
    datatype:'xml', 
    mtype:'POST',   
    postData: { 
     action:'popGrid', 
     sqlCount:sqlCount, 
     sqlSelect:sqlSelect, 
     sqlSelect2:sqlSelect2, 
     label1:label1, 
     label2:label2, 
    }, 
    colNames:['Label','Account_Num','Amount', 'Type Code', 'Record Code', 'Sequence'], 
    colModel :[ 
     {name:'label', index:'label', width:150, align:'center', sortable:false, editable:true}, 
     {name:'cntrct_id', index:'cntrct_id', width:150, align:'center', sortable:true}, 
     {name:'amount', index:'amount', width:150, align:'center', sortable:false, editable:true}, 
     {name:'type_cd', index:'type_cd', width:150, align:'center', sortable:false, editable:true}, 
     {name:'rec_cd', index:'rec_cd', width:150, align:'center', sortable:false}, 
     {name:'db_seq', index:'db_seq', width:150, align:'center', sortable:false}, 
    ], 
    editurl: 'functions.php', 
    extraparam: { action: function(){ return 'grdAdjust'; } }, 
    onSelectRow: function(id) { 
     if(id && id!==lastSel) { 
      jQuery('#list').restoreRow(lastSel); 
      jQuery('#list').editRow(id,true); 
      lastSel=id; 
     } 
    }, 

    pager: '#pager', 
    rowNum:100, 
    rowList:[100,200,300,400,500,600,700,800,900,1000], 
    sortname: 'cntrct_id', 
    sortorder: 'desc', 
    viewrecords: true, 
    caption: 'Adjustments' 
}); 
+0

您是否看到包含Firebug/Chrome之類的變量的傳出POST操作?它應該像在'editData:'參數中傳遞額外數據一樣簡單。 – Mark 2013-02-12 14:10:18

+0

這個php實際上並沒有出現在瀏覽器中,因爲我完全通過jquery調用php,所以我不認爲我能在firebug中看到POST變量。但是,我知道postData正在接收(因爲他們打印到文件),而editData不是。我正在發送editData:editData:{actions:'grdAdjust'}, – user 2013-02-12 14:23:28

回答

1

選項editDataform editing扮演同樣的角色之一主電網中的postData。另一方面,你在你的問題的文本中寫了關於「內聯編輯」的內容。在這種情況下,您應該使用extraparam選項(請參閱the documentation)。如果您需要常用內聯編輯選項,那麼$.jgrid.inlineEdit中的使用默認設置可能對您有所幫助。你不發佈任何代碼,我不知道以何種方式使用何種編輯模式和,所以我不能包括

修訂使用editDataextraparam等更多的例子:你在使用extraparam現在錯誤的方式。 extraparam不是 jqGrid選項,它的選項editRow。正確的用法可能是瞭解以下信息:

onSelectRow: function (id) { 
    if (id && id !== lastSel){ 
     $(this).jqGrid("restoreRow", lastSel); 
     $(this).jqGrid("editRow", id, { 
      keys: true, 
      extraparam: { 
       action: function() { 
        return 'grdAdjust'; 
       } 
      } 
     }); 
     lastSel = id; 
    } 
} 

如果您需要發佈的action恆定值,你可以使用extraparam簡化形式:像extraparam: {action: 'grdAdjust'}。如果您需要返回頁面中某些變量或某個元素的值,那麼函數的使用會非常有用,它將在editRow的不同調用之間進行更改。

此外,我會建議你包括gridview: true選項jqGrid和簡化colModel你使用。如果indexname具有相同的值,則可以發出它。默認值width已經是150,所以你也不需要指定width:150。如果要在全部或最多列中使用align:'center',可以通過在網格中包含cmTemplate: {align:'center'}選項來更改網格的默認值align。因爲大多數列都有sortable: false,所以您也可以在cmTemplate中包含該設置。其結果是可以減少colModel以下幾點:

colModel: [ 
    {name: 'label', editable: true}, 
    {name: 'cntrct_id', sortable: true}, 
    {name: 'amount', editable: true}, 
    {name: 'type_cd', editable: true}, 
    {name: 'rec_cd'}, 
    {name: 'db_seq'}, 
], 
cmTemplate: {align: 'center', sortable: false}, 

這種變化簡化了代碼不僅用於讀取,但維持了。有關列模板的更多信息,請參閱here

+0

Oleg,我在上面發佈了我的代碼。它顯示了我使用extraparam的嘗試,它基於我在Stack中看到的一些代碼。在回答你的問題時,我特別試圖進行內聯編輯。據我所知,extraparam應該與saveRow一起使用,但我不確定插入它的位置。 – user 2013-02-12 15:18:31

+0

@MattWall:'extraparam'是'editRow'的選項,而不是jqGrid的選項。你以錯誤的方式使用它。我會修改我的答案,以包含正確用法的示例。 – Oleg 2013-02-12 15:54:54

+0

@MattWall:我更新了我的答案。不要忘記在所有網格中包含'gridview:true'。 – Oleg 2013-02-12 16:11:45