[英]JQGRID persists in posting the original postData value when using reloadGrid
[英]jqGrid: construct postData array using a function's return value
晚上好,
初始情況
現在,當創建網格時,我使用靜態參數將參數傳遞給服務器,例如:
var $grid = jQuery("#grid-table").jqGrid({
url: '?c=grid.skill.GridSkill&json&o=get-data&type=1',
postData: {
'person_ref': function () { return $('#filter-person_ref').val();},
'country_ref': function () { return $('#filter-country_ref').val(); },
},
mtype: 'POST',
datatype: "json",
colNames: self.columnTitles,
colModel: self.columnNames,
...
});
當使用復雜的過濾器機制時(在jqGrid控件之外),這很難維護。
所需方法
我嘗試使用函數調用來設置postData值,而不是靜態方法:
/**
* extract filter data from LeftBar additionally to the person filter
*/
self.preparePostData = function () {
var arrPostData = {};
// retrieve values from select boxes ...
for (var i in LeftBar.arrAdditionalFilter) {
arrPostData[LeftBar.arrAdditionalFilter[i].field] = $('#' + LeftBar.arrAdditionalFilter[i].inputField).val();
}
// ... and add checkbox values
for (var i in LeftBar.arrCheckBoxFilter) {
arrPostData[LeftBar.arrCheckBoxFilter[i].field] = $('#' + LeftBar.arrCheckBoxFilter[i].inputField).is(':checked') ? 1 : 0;
}
console.log(arrPostData);
return arrPostData;
};
self.performLayout = function () {
var $grid = jQuery("#grid-table").jqGrid({
url: '?c=grid.skill.GridSkill&json&o=get-data&type=' + PageControl.skillTypeRef,
postData: function () {
return self.preparePostData();
},
mtype: 'POST',
datatype: "json",
colNames: self.columnTitles,
colModel: self.columnNames,
...
});
修改先前的方法
如果我使用該函數進行嘗試,它將永遠不會執行,因此我使用了如下的“試錯”方法:
...
postData: {'data': function() {
return self.preparePostData();
}},
它將給出“數據:[對象對象]”作為POST參數。
如上所述,在處理數據並嘗試不同的方法時,它幫助我找到了解決方案,我希望值得分享。
我的解決方案
在寫下這個問題並四處尋找時,我找到了解決自己問題的解決方案:-)無論如何,我都會完成它,以供將來的讀者尋找類似的解決方案,並希望閱讀更好的方法。
我正在使用基於PHP的Web服務來生成網格數據,最終給我提供了所需的發布數據是:
<?php
// NOTICE: debug code / contains demo statements from my tests
$objData= json_decode($_POST['data']);
// will give you an object of type StdClass ...
if ($objData) {
// ... but instead of using dynamic property access like '$obj->{$field}'
// convert it to a standard array, use it like using '$_POST' variables
try {
$arrPostFilter= get_object_vars($objData);
print 'Hello Country-Ref: '.$arrPostFilter['country_ref'];
} catch (Exception $ex) {
print 'Malformed data retrieved, error was: '.$ex->getMessage();
}
}
感謝您一直閱讀到最后並提出您的意見(這是因為解決方案不完善或可能會有所幫助:-))。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.