URL jqgrid json не работает

Я очень новичок в Jquery и, следовательно, мне нужна ваша помощь в этом отношении.

Я пытаюсь использовать jqGrid с URL-адресом JSON, но не могу его использовать. Htm-страница не отображает никаких данных.

$(function () {
    "use strict";
    $('#list').jqGrid({
        datatype: 'json',
        url: 'json_url',
        caption: 'Prospect Finder',
        gridview: true,
        height: "auto",
        colNames: ['Partner','First Name', 'Last Name', 'Organization'],
        colModel: [
            {name: 'PARTNER', jsonmap: 'PARTNER' },
            {name: 'NAME_FIRST',jsonmap: 'NAME_FIRST' },
            {name: 'NAME_LAST', jsonmap: 'NAME_LAST' },
            {name: 'NAME_ORG1', jsonmap: 'NAME_ORG1' }
        ],
        jsonReader: {
            repeatitems: false,
            id: "PARTNER",
            root: function (obj) {
                return obj;
            }
        }
    });
});

И это мои данные JSON

{"itab":[ { "PARTNER":"0061000220", "NAME_FIRST":"", "NAME_LAST":"", "NAME_ORG1":"GTA Central" }, { "PARTNER":"0061000221", "NAME_FIRST":"", "NAME_LAST":"", "NAME_ORG1":"GTA West" }, { "PARTNER":"0061000222", "NAME_FIRST":"", "NAME_LAST":"", "NAME_ORG1":"GTA East" }, { "PARTNER":"0041000141", "NAME_FIRST":"", "NAME_LAST":"", "NAME_ORG1":"Office Systems" }  ]}

Может ли кто-нибудь мне помочь?

Спасибо, диджей


person user1596433    schedule 15.02.2013    source источник
comment
у вас тут лишняя запятая 'NAME_ORG1' }, ‹--   -  person wirey00    schedule 16.02.2013
comment
Как вы предоставляете данные json в свой jqgrid? Не уверен, но я думаю, что виноват жестко закодированный url:json_url?   -  person Gaurav Pandey    schedule 16.02.2013
comment
@wirey: я удалил лишнюю запятую, но проблема все еще не устранена.   -  person user1596433    schedule 16.02.2013
comment
@gaurav, URL-адрес не жестко закодирован, это правильный URL-адрес сервера, вывод json которого я отобразил в своем исходном запросе.   -  person user1596433    schedule 16.02.2013
comment
Какой браузер вы используете? Если вы используете chrome/firefox, откройте инструменты разработчика/firebug и проверьте консоль на наличие ошибок и убедитесь, что запрос выполнен успешно.. и вы получаете JSON в ответ   -  person wirey00    schedule 16.02.2013
comment
@wirey Проверено в chrome, в консоли нет ошибок, и я получаю вывод JSON, проверенный в Jlint.   -  person user1596433    schedule 16.02.2013
comment
@user1596433 user1596433 попробуйте изменить корень jsonReader на «itab», потому что он должен указывать на массив, содержащий данные. или измените возврат на obj.itab   -  person wirey00    schedule 16.02.2013
comment
Вы проверили, что ваш JSON действителен? По моему опыту, jqGrid ожидает больше информации в JSON, Ex Total, странице, записях, а затем в строках. Я также не знаком с потребностью в части чтения JSON в вашей сетке? С чем вы строите JSON?   -  person Mark    schedule 16.02.2013


Ответы (3)


Вам нужно просто исправить свойство root jsonReader на root: "itab". Кроме того, важно включить rowNum с достаточно большим значением (например, rowNum: 10000). Если вы этого не сделаете и не используете pager, тогда jqGrid просто отобразит только первые 20 строк из ответа сервера (значение rowNum по умолчанию равно 20) и отбросит все остальные строки.

Демо успешно считывает данные JSON и отображает

введите здесь описание изображения

Он использует следующий код

$(function () {
    "use strict";
    $('#list').jqGrid({
        datatype: 'json',
        url: 'user1596433.json',
        caption: 'Prospect Finder',
        gridview: true,
        height: "auto",
        colNames: ['Partner','First Name', 'Last Name', 'Organization'],
        colModel: [
            {name: 'PARTNER', width: 80 },
            {name: 'NAME_FIRST' },
            {name: 'NAME_LAST' },
            {name: 'NAME_ORG1', width: 100 }
        ],
        jsonReader: {
            repeatitems: false,
            id: "PARTNER",
            root: "itab"
        },
        rowNum: 10000,
        autoencode: true,
        loadonce: true
    });
});
person Oleg    schedule 16.02.2013

Посмотрите документы. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_data Ваш json настроен неправильно. Видеть

  { 
      "total": "xxx", 
      "page": "yyy", 
      "records": "zzz",
      "rows" : [
        {"id" :"1", "cell" :["cell11", "cell12", "cell13"]},
        {"id" :"2", "cell":["cell21", "cell22", "cell23"]},
          ...
      ]
    }

Это формат по умолчанию (хотя вы можете переопределить его, но вам все равно нужно указать идентификатор, общее количество, страницу и записи)

jsonReader: {
    repeatitems: false,
    id: "Id",
    root: function (obj) { return obj.itab; },
    page: function (obj) { return 1; },
    total: function (obj) { return 1; },
    records: function (obj) { return obj.itab.length; }
}
person ingo    schedule 16.02.2013

Мой опыт:

Таблица зависла при загрузке, что означает, что она пыталась получить данные по URL-адресу, но не может его обработать.

Затем я понял, что мой json несовместим с jsonReader по умолчанию, решение либо

1. установите jsonReader для совместимости с вашими данными json

пример json-данных:

{"page":1,"YOUR_ROW_NAME":[{"YOUR_ID":"14","YOUR_CELL_NAME":["ImageHeight"]}]}

добавить следующее в javascript (другие ключи (например, страница) также могут быть переопределены)

jsonReader : { 
      root: "YOUR_ROW_NAME",  
      cell: "YOUR_CELL_NAME", 
      id: "YOUR_ID", 
},

2. осторожно используйте jsonReader по умолчанию, должны использовать «строки», «идентификатор», «ячейка» внутри квадратных скобок [] при кодировании данных

foreach($all as $row){
    $response->rows[$i]['id']=$row->id;
    $response->rows[$i]['cell']=array($row->id,$row->name,$row->url);
    $i++;
}

полезная вики для начинающих: http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_data

person emily    schedule 03.02.2014