jqGrid не отображает данные, ошибок нет - PullRequest
0 голосов
/ 12 февраля 2011

ОК, это в основном работает, поскольку вызывается мое PHP-действие и возвращает данные JSON из запроса просто отлично. Проблема в том, что jqGrid не отображает данные. Что мне не хватает? Я прочитал каждую статью здесь и в другом месте на предмет, который я могу найти. Похоже, это должно работать.

HTML:

<table id="dsisBaseTable"></table>
<div id=dsisBasePager"></div>

Вот мое определение сетки (вся функция JavaScript):

function runGridBaseReport() {
    $('#DSISBaseReportResult').html('<table id="dsisBaseTable"></table>' +
        '<div id="dsisBasePager"></div> ');
    $('#DSISBusy').fadeIn();
    var loc = $('#dsisLocation').val();
    var f = (loc == '') ? '' : loc.substring(0, 1);
    if (f.match(/[A-Z]/) || f.match(/[a-z]/))
    loc = loc.substring(1);

    var dsisParams = {
        mode : 'basereport',
        dsisLocation : loc,
        dsisGuild : $('#dsisGuild').val(),
        dsisNick : $('#dsisNick').val(),
        dsisOccGuild : $('#dsisOccGuild').val(),
        dsisOccNick : $('#dsisOccNick').val(),
        dsisMinLevel : $('#dsisMinLevel').val(),
        dsisMaxLevel : $('#dsisMaxLevel').val(),
        dsisEconomy : $('#dsisEconomy').val(),
        dsisDt : $('#dsisDt').val(),
        dsisDs : $('#dsisDs').val(),
        dsisPr : $('#dsisPr').val(),
        dsisPs : $('#dsisPs').val(),
        dsisMinFleet : $('#dsisMinFleet').val(),
        dsisMaxFleet : $('#dsisMaxFleet').val(),
        dsisCapitol : $('#dsisCapitol').is(':checked'),
        dsisWormHole : $('#dsisWormHole').is(':checked'),
        dsisAeFormat : $('#dsisAeFormat').is(':checked')
        };
    var data = { data: jsonString(dsisParams)};

    $("#dsisBaseTable").jqGrid({
        url: indexUrl + '/basereport',
        datatype: 'json',
        postData: data,
        mtype: 'POST',
        colNames:['Name',
                  'Location',
                  'WH',
                  'Inc',
                  'Eco',
                  'Guild',
                  'Owner',
                  'Level',
                  'Guild',
                  'OccBy',
                  'JG(Log)',
                  'CC',
                  'PH',
                  'DS',
                  'DT',
                  'PS',
                  'PR',
                  'DB',
                  'Fleet',
                  'Days',
                  'Updated By'],
        colModel :[
          {name:'baseName',
            index:'baseName',
            sortable: false,
            width: 50,
            jsonmap: 'row.baseName'},
          {name:'location',
            index:'location',
            width: 50,
            jsonmap: 'row.location'},
          {name:'wh',
            index:'wh',
            width: 50,
            jsonmap: 'row.wormhole'},
          {name:'inc',
            index:'inc',
            align:'right',
            width: 50,
            jsonmap: 'row.income'},
          {name:'eco',
            index:'eco',
            align:'right',
            width: 50,
            jsonmap: 'row.economy'},
          {name:'ownerGuild',
            index:'ownerGuild',
            width: 50,
            jsonmap: 'row.ownerGuild'},
          {name:'ownerNick',
            index:'ownerNick',
            width: 50,
            jsonmap: 'row.ownerNick'},
          {name:'ownerLevel',
            index:'ownerLevel',
            width: 50,
            jsonmap: 'row.ownerLevel'},
          {name:'occGuild',
            index:'occGuild',
            width: 50,
            jsonmap: 'row.occGuild'},
          {name:'occNick',
            index:'occNick',
            width: 50,
            jsonmap: 'row.occNick'},
          {name:'jumpGate',
            index:'jumpGate',
            width: 50,
            jsonmap: 'row.jumpGate'},
          {name:'commandCenter',
            index:'commandCenter',
            width: 50,
            jsonmap: 'row.commandCenter'},
          {name:'photons',
            index:'photons',
            width: 50,
            jsonmap: 'row.photons'},
          {name:'dshield',
            index:'dshields',
            width: 50,
            jsonmap: 'row.dshields'},
          {name:'disruptors',
            index:'disruptors',
            width: 50,
            jsonmap: 'row.disruptors'},
          {name:'pshields',
            index:'pshields',
            width: 50,
            jsonmap: 'row.pshields'},
          {name:'prings',
            index:'prings',
            width: 50,
            jsonmap: 'row.prings'},
          {name:'debris',
            index:'debris',
            width: 50,
            jsonmap: 'row.debris'},
          {name:'fleetSize',
            index:'fleetSize',
            width: 50,
            jsonmap: 'row.fleetSize'},
          {name:'daysOld',
            index:'daysOld',
            width: 50,
            jsonmap: 'row.daysOld'},
          {name:'updatedBy',
            index:'updatedBy',
            sortable: false,
            width: 50,
            jsonmap: 'row.updatedBy'}
        ],
        pager: $('#dsisBasePager'),
        rowNum: $('#basePageSize').val(),
        rowList:[20,30,40,50],
        sortname: 'location',
        sortorder: 'asc',
        viewrecords: true,
        caption: 'Base Report',
        width: 1024,
        height: 300,
        jsonReader : {
            root: "rows",
            page: "page",
            total: "total",
            records: "records",
            repeatitems: false,
            id: "id"
        }
    });
    /*    pages'   => round($totRows/$dsisPageSize),
         'page'    => $dsisPage,
         'total'   => $numRows/$dsisPage,
         'records' => $totRows,
         'rows' */
    $('#DSISBusy').fadeOut();
    $('#DSISBaseReportResult').fadeIn();
    return false;
}

Вот как я обрабатываю запрос и возвращаю результаты:

public function basereportAction()
{
    try
    {
      $params = $this->_getAllParams();
      //Log::logErr('params:'.print_r($params, true));

      $data = $this->_getParam('data');
      //Log::logErr('Data:'.print_r($data, true));

      $reportParams->request = json_decode($data);
      //Log::logErr('DSIS Obj:'.print_r($obj, true));

      $reportParams->request->dsisPage = $this->_getParam('page');
      $reportParams->request->dsisPageSize = $this->_getParam('rows');
      $reportParams->request->dsisOrderBy = $this->_getParam('sidx');
      $reportParams->request->dsisSortDir = $this->_getParam('sord');

      $base = new Base();
      // $result is a PHP array
      $result = $base->outputDSISReportHtml($reportParams, true);

      $js = json_encode($result);
      Log::logErr('JSON:'.$js);

      $callback = $this->_getParam('callback');

      echo $js;
    }
    catch( Exception $e)
    {
        Log::logErr('DSISReportController::basereport:Error:'.$e->getMessage());
        throw $e;
    }
}

Это мои данные:

{
    "total": 0,
    "page": "1",
    "records": 1,
    "rows": [
        {
            "id": 0,
            "row": {
                "baseName": "Stratos",
                "location": "J15:32:53:41",
                "wormhole": "",
                "income": 78,
                "economy": 78,
                "ownerGuild": "CDA",
                "ownerNick": "D-Day 9000",
                "ownerLevel": "17.14",
                "occGuild": "",
                "occNick": "",
                "jumpGate": 0,
                "commandCenter": 1,
                "photons": "0",
                "dshields": "0",
                "disruptors": "0",
                "pshields": "0",
                "prings": "0",
                "debris": 0,
                "fleetSize": "22250",
                "daysOld": 11,
                "updatedBy": 3057
            }
        }
    ]
}

Ответы [ 2 ]

1 голос
/ 01 октября 2012

У меня была такая же проблема.Выставленная jqgrid не возвращает XML.Я заметил, что в базе данных реестра есть некоторые специальные символы, такие как «&».Проблема была в браузере.Решил следующим образом, поместив возвращаемое поле тега CDATA в XML:

sb.Append ("<cell>"); sb.Append ("<! [CDATA [" + g.Name + "]"); sb.Append ("]> </ cell>");
1 голос
/ 12 февраля 2011

Единственная ошибка, которую я вижу в конце ваших данных JSON, заканчивается на "},]}".Вы должны удалить запятую перед ']'.

После минимальных изменений, чтобы иметь возможность воспроизвести ваш тестовый пример ваша демо работает без видимых проблем.

ОБНОВЛЕНО: То же демо с новыми данными JSON работает также без проблем.Я полагаю, ошибка в той части кода, которую вы не разместили здесь.Например, я разместил ваш код внутри jQuery(document).ready(function () {/*the code*/});.Я должен удалить параметр postData, поскольку его значение data, которое вы используете в своем коде, не определено.Точно по той же причине переменная indexUrl, используемая в параметре url, мне пришлось изменить.Параметр rowNum:$('#basePageSize').val() выглядит также странно, и я заменил его на rowNum:20.Если бы вы могли опубликовать URL в работающем (не работающем) оригинальном решении или действительно полном HTML и JavaScript-коде, возможно, вам могли бы помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...