не может добавлять данные в jqGrid из php в формате json

Привет, StackOverFlow. Я пытаюсь добавить информацию в jqGrid, которая извлекается из базы данных MySQL. У меня два файла => index.html и data.php (оба в том же каталоге)

index.html source =>

<script type="text/javascript"> $(function(){ $("#jqGrid_tb").jqGrid({ url: "data.php", datatype: "json", sortable: true, height: "auto", colNames: ["Name","Surname","Birth Year","Famous Film"], colModel: [ {name: "name", index: "name", width: "150"}, {name: "surname", index: "surname", width: "150"}, {name: "b_year", index: "year", width: "150"}, {name: "film", index: "film", width: "200"} ], rowNum: 5, rowList: [5,10,15], viewrecords: true, pager: $("#pager"), caption: "Famous Actors", }).navGrid("#pager"); }); </script> <div id="grid"> <table id="jqGrid_tb"></table> <div id="pager"></div> </div> 

data.php source =>

 include ("JSON.php"); $json = new Services_JSON(); $con = new mysqli("host","user","pswd","db"); if (!$con->connect_errno){ if ($r = $con->query("SELECT * FROM actors")){ while ($row = $r->fetch_assoc()){ $info[] = array( "name" => $row[name], "surname" => $row[surname], "b_year" => $row[b_year], "film" => $row[film], ); } $r->free(); } } echo $json->encode($info); if (isset($con)){ $con->close(); } 

jqGrid отображается без какой-либо информации в файле index.html, также при открытии информации о файле data.php успешно закодирована в формате JSON, что неправильно, я не могу понять. Пожалуйста, помогите, спасибо …

Ваш формат ответа неверен. Вы можете перейти на страницу jqGrid Demos, где вы найдете образец для PHP / MySQL после расширения загрузки данных, а затем выберите JSON Data .

Правильный формат данных должен выглядеть следующим образом:

 { "total": "1", "page": "1", "records": "2", "rows": [ { "name": "Robert", "surname": "De Niro", "b_year": "1943", "film": "Once Upon A Time In America" }, { "name": "Al", "surname": "Pacino", "b_year":"1971", "film": "Scent Of A Woman"} ] } 

Где:

  • total -> общее количество страниц
  • page -> номер текущей страницы
  • records -> общее количество записей
  • rows -> строки данных

Кроме того, если вы хотите, чтобы строки были объектами, вам необходимо отключить repeatitems в jqGrid jsonReader :

 $("#jqGrid_tb").jqGrid({ ... jsonReader: { repeatitems: false } }); 

Также рекомендуется, чтобы строки имели уникальный id для последующей ссылки.

Вы должны включить

 jsonReader: { repeatitems: false, root: function (obj) { return obj; }, page: function (obj) { return 1; }, total: function (obj) { return 1; }, records: function (obj) { return obj.length; } } 

в качестве дополнительной опции jqGrid вы не хотите изменять формат входных данных. Кроме того, вы должны указать, какие значения должны назначать jqGrid как атрибут id строки. Вы можете включить дополнительное свойство id качестве дополнительного свойства для каждого возвращаемого элемента, или вы можете добавить свойство key: true в столбец (в colModel ), который содержит уникальные значения. Например, если вы можете гарантировать, что значения из "name" уже уникальны, то вы можете включить свойство key: true в определение столбца "name" .

Кроме того, вы можете рассмотреть возможность использования loadonce: true вариант jqGrid. В случае, когда полные данные сетки будут загружены сразу, а сортировка, поиск подкачки и поиск (фильтрация) данных будут реализованы jqGrid на стороне клиента без необходимости реализации некоторого дополнительного кода на стороне сервера. Вы не должны использовать этот параметр в случае большого количества строк (много или много тысяч строк) в сетке.