有點奇怪,您需要使用HTTP POST,但將參數放在URL中。 URL中的參數通常只用於HTTP GET請求,但HTTP GET通常會被緩存(在HTTP頭中不會被禁止)。無論如何,一切皆有可能。
我將從刪除開始。瞭解formatter:'actions'
在內部使用表格編輯delGridRow
很重要,因爲哪些選項和回調描述爲here。選項url
指定在Ajax請求中使用的URL,並且mtype
選項可用於指定HTTP方法。默認是mtype: "POST"
。要製作動態的URL,您可以使用例如onclickSubmit
回調,其中第一個參數(options
)是參考到內部選項delGridRow
。您可以修改options
的url
屬性,然後jqGrid將在將發送到服務器的Ajax請求中使用修改後的URL。瞭解onclickSubmit
的主要目標是通過附加信息擴展postdata,這一點很重要。如果不需要發送附加數據,應該返回空對象{}
。 onclickSubmit
的第二個參數是ID或逗號分隔的ID列表(如果您使用的是multiselect: true
)。我想你不使用multiselect: true
選項,只需要刪除一行。得到的onclickSubmit
回調的代碼如下所示:
onclickSubmit: function (options, rowid) {
options.url = "ListAjaxAccess.cfm?functionName=deleteMember&functionParams=" +
JSON.stringify({id: rowid});
}
,如果您使用免費的jqGrid比在這裏你可以設置回調很容易的地方。見the article。您可以包括與物業的jqGrid選項formDeleting
:
formDeleting: {
onclickSubmit: function (options, rowid) {
options.url = "ListAjaxAccess.cfm?functionName=deleteMember&functionParams=" +
JSON.stringify({id: rowid});
}
}
現在刪除行法delGridRow
將使用回調(含formatter: "actions"
)的任何電話。
如果您必須使用舊的jqGrid 4.6並且您使用的是formatter: "actions"
,那麼您應該精確檢查formatter: "actions"
here的選項。代碼中的相應更改將位於定義爲formatter: "actions"
的列內。首先你應該永不使用name: ''
。每列的name
應該對應於HTML中的id
的規則,並且這些值必須是唯一的。您可以使用類似
{
formatter: "actions",
formatoptions: {
delOptions: {
onclickSubmit: function (options, rowid) {
options.url = "ListAjaxAccess.cfm?functionName=deleteMember&functionParams=" +
JSON.stringify({id: rowid});
}
}
}
}
現在又回到了第二個問題:設置聯編輯的動態URL。這可能相對比較棘手,因爲我寫了在URL中放置參數對於HTTP POST來說絕對是不典型的。可以使用beforeSaveRow
回調來動態修改URL,但回調的選項沒有修改結果。因此,您應該確認您確實需要將數據作爲URL的參數,並將相同的數據放在中,但HTTP POST的正文不適合您。
更新:如果您需要使用HTTP GET進行內聯編輯,那麼你應該先在你的代碼的開頭添加代碼
$.jgrid = $.jgrid || {};
$.jgrid.inlineEdit = $extend(true, $.jgrid.inlineEdit, {mtype: "GET"});
地方。它將用於內聯編輯的默認HTTP方法從「POST」更改爲「GET」。這是必需的,因爲舊版jqGrid 4.6版本的formatter: "actions"
無法指定mtype
內聯編輯選項。在免費的jqGrid中,可以使用mtype: "GET"
內部的formatoptions
屬性formatter: "actions"
或者inlineEditing
內部的jqGrid選項:inlineEditing: { mtype: "GET" }
。
爲了使編輯可以使用serializeRowData
回調的jqGrid內嵌的參數自定義格式(見here):
editurl: "ListAjaxAccess.cfm",
serializeRowData: function (postData) {
return {
functionName: "editMember",
functionParams: JSON.stringify(postData)
}
}
要使用HTTP GET進行刪除,你可以添加mtype: "GET"
選擇上述delOptions
。或者您可以使用另一種形式:
{
formatter: "actions",
formatoptions: {
delOptions: {
mtype: "GET",
serializeDelData: function (postData) {
return {
functionName: "deleteMember",
functionParams: JSON.stringify({id: postData.id});
}
}
}
}
兩個編輯和刪除將使用editurl: "ListAjaxAccess.cfm"
,但將使用不同的URL參數。
我必須指出,默認情況下,HTTP GET將被緩存在Web瀏覽器中。爲確保不使用緩存,我建議您在URL上的服務器響應中設置Cache-Control: private, max-age=0
HTTP標頭。
我看到很多方法來解決你的問題。知道**你使用哪個版本的jqGrid和哪個分支很重要?**([free jqGrid](https://github.com/free-jqgrid/jqGrid) - 我開發的分支,商業版本[Guriddo jqGrid JS ](http://guriddo.net/?page_id=103334)或jqGrid版本<= 4.7中的某個舊版本)。瞭解**如何使用內聯編輯和刪除**('formatter:「actions」'','inlineNav'等等)更加重要。如果你不使用免費的jqGrid,那麼實現將取決於你如何使用內聯編輯和刪除。 – Oleg
@Oleg - 我認爲我們正在使用免費的jqGrid,版本4.6 – froadie
@Oleg我是jqGrid的新手(我正在編輯別人放在一起的網格),所以不知道你需要看哪個代碼。但這是colModel中actions列的最後一項:'{label:'', name:'',search:false,width:60,fixed:true,sortable:false,resize:false,formatter:'actions',formatoptions:{keys:true}}' – froadie