jqGrid:使用函数的返回值构造postData数组

时间:2014-04-23 21:00:33

标签: javascript php jquery jqgrid

晚上好,

初始情况

现在创建网格时我使用静态参数将参数传递给服务器,如:

  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参数。

1 个答案:

答案 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();
  }
}

感谢阅读直到最后和您的意见(要么因为解决方案很糟糕,要么可以帮助:-))。