jqGrid с данными JSON отображает таблицу как пустую - PullRequest
13 голосов
/ 03 ноября 2008

Я пытаюсь создать jqgrid, но таблица пуста. Таблица отображается, но данные не отображаются.

Данные, которые я получаю от вызова php:

{
"page":"1",
"total":1,
"records":"10",
"rows":[
{"id":"2:1","cell":["1","image","Chief Scout","Highest Award test","0"]},
{"id":"2:2","cell":["2","image","Link Badge","When you are invested as a Scout, you may be eligible to receive a Link Badge. (See page 45)","0"]},
{"id":"2:3","cell":["3","image","Pioneer Scout","Upon completion of requirements, the youth is invested as a Pioneer Scout","0"]},
{"id":"2:4","cell":["4","image","Voyageur Scout Award","Voyageur Scout Award is the right after Pioneer Scout.","0"]},
{"id":"2:5","cell":["5","image","Voyageur Citizenship","Learning about and caring for your community.","0"]},
{"id":"2:6","cell":["6","image","Fish and Wildlife","Demonstrate your knowledge and involvement in fish and wildlife management.","0"]},
{"id":"2:7","cell":["7","image","Photography","To recognize photography knowledge and skills","0"]},
{"id":"2:8","cell":["8","image","Recycling","Demonstrate your knowledge and involvement in Recycling","0"]},
{"id":"2:10","cell":["10","image","Voyageur Leadership ","Show leadership ability","0"]},
{"id":"2:11","cell":["11","image","World Conservation","World Conservation Badge","0"]}
]}

Конфигурация javascript выглядит так:

$("#"+tableId).jqGrid ({
    url:'getAwards.php?id='+classId,
    dataType : 'json',
    mtype:'POST',
    colNames:['Id','Badge','Name','Description',''],
    colModel : [
        {name:'awardId', width:30, sortable:true, align:'center'},
        {name:'badge', width:40, sortable:false, align:'center'},
        {name:'name', width:180, sortable:true, align:'left'},
        {name:'description', width:380, sortable:true, align:'left'},
        {name:'selected', width:0, sortable:false, align:'center'}
        ],
    sortname: "awardId",
    sortorder: "asc",
    pager: $('#'+tableId+'_pager'),
    rowNum:15,
    rowList:[15,30,50],
    caption: 'Awards',
    viewrecords:true,
    imgpath: 'scripts/jqGrid/themes/green/images',
    jsonReader : { 
        root: "rows", 
        page: "page", 
        total: "total", 
        records: "records", 
        repeatitems: true, 
        cell: "cell", 
        id: "id",
        userdata: "userdata", 
        subgrid: {root:"rows", repeatitems: true, cell:"cell" } 
    },
    width: 700,
    height: 200
});

HTML выглядит так:

<table class="awardsList" id="awardsList2" class="scroll" name="awardsList" />
<div id="awardsList2_pager" class="scroll"></div>

Я не уверен, что мне нужно было определить jsonReader, поскольку я пытался сохранить значение по умолчанию. Если php-код поможет, я тоже могу выложить.

Ответы [ 9 ]

20 голосов
/ 04 ноября 2008

Я получил его на работу!

Поле dataType должно быть тип данных . Он чувствителен к регистру.

5 голосов
/ 07 июня 2010

Проблема также возникает, когда вы включаете скрипт jquery.jqGrid.min.js до этого grid.locale-en.js . Проверьте это, если есть какие-либо проблемы с вызовом метода контроллера.

3 голосов
/ 15 сентября 2010

Я столкнулся с той же проблемой при переходе с jqGrid 3.6 на jqGrid 3.7.2. Проблема заключалась в том, что мой JSON не был правильно заключен в двойные кавычки (как того требует спецификация JSON). jqGrid 3.6 допустил мой неверный JSON, но jqGrid 3.7 строже.

См. Здесь: http://simonwillison.net/2006/Oct/11/json/

Invalid

{
page:"1",
total:1,
records:"10",
rows:[
    {"id":"2:1","cell":["1","image","Chief Scout","Highest Award test","0"]},
    {"id":"2:2","cell":["2","image","Link Badge","When you are invested as a Scout, you may be eligible to receive a Link Badge. (See page 45)","0"]},
    {"id":"2:3","cell":["3","image","Pioneer Scout","Upon completion of requirements, the youth is invested as a Pioneer Scout","0"]}
]}

Действительно

{
"page":"1",
"total":1,
"records":"10",
"rows":[
    {"id":"2:1","cell":["1","image","Chief Scout","Highest Award test","0"]},
    {"id":"2:2","cell":["2","image","Link Badge","When you are invested as a Scout, you may be eligible to receive a Link Badge. (See page 45)","0"]},
    {"id":"2:3","cell":["3","image","Pioneer Scout","Upon completion of requirements, the youth is invested as a Pioneer Scout","0"]}
]}
1 голос
/ 04 января 2012

В моем случае проблема была вызвана следующей строкой кода PHP (которая была взята из демонстрации jqGrid):

$responce->page = $page;

Что здесь не так: я обращаюсь к странице свойств объекта $responce, не создав ее сначала. Это заставило Apache отобразить следующее сообщение об ошибке:

Strict Standards: Creating default object from empty value in /home/mariusz/public_html/rezerwacja/apps/frontend/modules/service/actions/actions.class.php on line 35

И, наконец, сообщение об ошибке отправлялось в json reader в скрипте.

Я исправил проблему, создав пустой объект:

$responce = new stdClass();
1 голос
/ 30 ноября 2011

Ребята просто хотят помочь вам в этом. Я получил следующие работы:

JSON

var mydata1 = { "page": "1", "total": 1, "records": "4","rows": [{ "id": 1, "cell": ["1", "cell11", "values1" ] },
    { "id": 2, "cell": ["2", "cell21", "values1"] },
    { "id": 3, "cell": ["3", "cell21", "values1"] },
    { "id": 4, "cell": ["4", "cell21", "values1"] }
]};

// Пометить под важной строкой. тип данных "jsonstring" работал для меня вместо "json".

datatype: "jsonstring",

contentType: "application/json; charset=utf-8",

datastr: mydata1,

colNames: ['Id1', 'Name1', 'Values1'],

colModel: [
      { name: 'id1', index: 'id1', width: 55 },
      { name: 'name1', index: 'name1', width: 80, align: 'right', sorttype: 'string' },
      { name: 'values1', index: 'values1', width: 80, align: 'right', sorttype: 'string'}],

С уважением,

1 голос
/ 18 февраля 2011

Это может быть старая запись, но я опубликую свой успех, чтобы помочь другим.

Ваш JSON должен быть в следующем формате:

{
"rows": [
    {
        "id": 1,
        "cell": [
            1,
           "lname",
            "fname",
            "mi",
            phone,
            "cell1",
            "cell2",
            "address",
            "email"
        ]
    },
    {
        "id": 2,
        "cell": [
            2,
            "lname",
            "fname",
            "mi",
            phone,
            "cell1",
            "cell2",
            "address",
            "email"
        ]
    }
]

}

и я написал эту модель в Zend, чтобы вы могли использовать ее, если хотите. Манипулируй, как хочешь.

public function fetchall ($sid, $sord)
{
    $select = $this->getDbTable()->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
    $select->setIntegrityCheck(false)
           ->join('Subdiv', 'Subdiv.SID = Contacts.SID', array("RepLastName" => "LastName", 
                                                                "Subdivision" => "Subdivision",
                                                                "RepFirstName" => "FirstName"))
           ->order($sid . " ". $sord);

    $resultset = $this->getDbTable()->fetchAll($select);
    $i=0;
    foreach ($resultset as $row) {
        $entry  = new Application_Model_Contacts();

        $entry->setId($row->id);
        $entry->setLastName($row->LastName);
        $entry->setFirstName1($row->FirstName1);
        $entry->setFirstName2($row->FirstName2);
        $entry->setHomePhone($row->HomePhone);
        $entry->setCell1($row->Cell1);
        $entry->setCell2($row->Cell2);
        $entry->setAddress($row->Address);
        $entry->setSubdivision($row->Subdivision);
        $entry->setRepName($row->RepFirstName . " " . $row->RepLastName);
        $entry->setEmail1($row->Email1); 
        $entry->setEmail2($row->Email2);

        $response['rows'][$i]['id'] = $entry->getId(); //id
        $response['rows'][$i]['cell'] = array (
                                                $entry->getId(),
                                                $entry->getLastName(),
                                                $entry->getFirstName1(),
                                                $entry->getFirstName2(),
                                                $entry->getHomePhone(),
                                                $entry->getCell1(),
                                                $entry->getCell2(),
                                                $entry->getAddress(),
                                                $entry->getSubdivision(),
                                                $entry->getRepName(),
                                                $entry->getEmail1(),
                                                $entry->getEmail2()
                                            );
        $i++;

    }
    return $response;
}
1 голос
/ 14 апреля 2010

Я также заставил его работать: тип данных - правильное написание - это показано в примере таким образом, но оно несовместимо с всем остальным в библиотеке, поэтому было легко ошибиться

Я очень устал от погони за этой скудной документацией, и я действительно чувствую, что JSON, который является правильным и уместным для использования в JavaScript, действительно получил короткое освещение в пользу XML. Python и JavaScript вместе, через JSON, являются действительно сильной комбинацией, но это постоянная борьба с этой конкретной библиотекой.

Любой, у кого есть альтернатива:

1> Правильно поддерживает темы пользовательского интерфейса jQuery (включая закругленные углы!) (http://datatables.net имеет гораздо лучшую поддержку тем)

2> Позволяет изменять размер столбцов (http://datatables.net не поддерживает это из коробки)

3> Разрешает вложенные сетки (http://datatables.net позволяет вам делать все, что вы хотите здесь, через событие)

пожалуйста, дайте мне знать. Я трачу больше времени на эту одну часть моего интерфейса, чем на всю остальную его часть вместе взятую, и все это время я трачу на поиск рабочих примеров и «пробных действий», которые просто раздражают.

S

0 голосов
/ 09 декабря 2013

Я работал с WAMP 2.4, я сходил с ума от этой проблемы, я пробовал много вещей, таких как установка предыдущих версий PHP и, например, 5.2, een, которые я пробовал в Windows XP, и множество вариантов jqGrid. Ну спасибо наконец Олегу и Мариушу я нахожу единственную строчку:

$responce = new stdClass(); 

Раньше использование $ response могло решить все, и теперь моя сетка работает отлично !!!

Спасибо, друзья.

0 голосов
/ 03 апреля 2009

Я не думаю, что ваш ID - правильный тип, я думаю, что это должен быть int.

Для данного json вам действительно не нужны настройки jsonreader. В любом случае, вы перечислили значения по умолчанию, плюс у вас нет подсетки в вашем json.

Попробуйте это:

{
"page":"1",
"total":1,
"records":"10",
"rows":[
{"id":1 ,"cell":["1","image","Chief Scout","Highest Award test","0"]},
{"id":2,"cell":["2","image","Link Badge","When you are invested as a Scout, you maybe eligible to receive a Link Badge. (See page 45)","0"]},
{"id":3,"cell":["3","image","Pioneer Scout","Upon completion of requirements, the youth is invested as a Pioneer Scout","0"]},
{"id":4,"cell":["4","image","Voyageur Scout Award","Voyageur Scout Award is the right after Pioneer Scout.","0"]},
{"id":5,"cell":["5","image","Voyageur Citizenship","Learning about and caring for your community.","0"]},
{"id":6,"cell":["6","image","Fish and Wildlife","Demonstrate your knowledge and involvement in fish and wildlife management.","0"]},
{"id":7,"cell":["7","image","Photography","To recognize photography knowledge and skills","0"]},
{"id":8,"cell":["8","image","Recycling","Demonstrate your knowledge and involvement in Recycling","0"]},
{"id":9,"cell":["10","image","Voyageur Leadership ","Show leadership ability","0"]},
{"id":10,"cell":["11","image","World Conservation","World Conservation Badge","0"]}
]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...