晚上好,
初始情况
现在创建网格时我使用静态参数将参数传递给服务器,如:
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();
}},
将“data:[Object object]”作为POST参数。
答案 0 :(得分:0)
如上所述,在努力处理数据并尝试不同的方法时,它帮助我找到了解决方案,我希望它值得分享。
我的解决方案
在写下这个问题并玩弄时,我找到了解决我自己问题的方法:-)无论如何,我将为未来的读者寻找类似的解决方案并希望阅读更好的方法。
我使用基于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();
}
}
感谢阅读直到最后和您的意见(要么因为解决方案很糟糕,要么可以帮助:-))。