簡體   English   中英

jqGrid:使用函數的返回值構造postData數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM