Javascript jqGrid:使用函数';s返回值

Javascript jqGrid:使用函数';s返回值,javascript,php,jquery,jqgrid,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();},

晚上好,

初始情况

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

  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]”作为POST参数。

如上所述,在与数据斗争并尝试不同方法的同时,它帮助我找到了一个解决方案,我希望它值得分享


我的解决方案

当我把这个问题写下来并四处玩转时,我找到了解决我自己问题的方法:-)无论如何,我都会完成它,以供未来的读者寻找类似的解决方案,并希望阅读更好的方法

我正在使用基于PHP的web服务生成网格数据,最终得到我所需的post数据是:

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

请不要将答案放在问题中。相反,把解决方案放在你的答案中并“接受”它。编辑两者。谢谢。请不要在标题中包含“已解决”一词,也不要将答案放在问题中。我把你的答案从你的问题转移到下面的答案中。请在本网站允许的情况下尽快“接受”您的答案。谢谢