Я работаю над примером проекта для реализации jqgrid с использованием CodeIgniter. Я использовал приведенный ниже код.
В контроллере я создал функцию с именем loadDataGrid
function loadDataGrid()
{
$page = isset($_GET['page'])?$_GET['page']:1;
$limit = isset($_GET['rows'])?$_GET['rows']:10;
$sidx = isset($_GET['sidx'])?$_GET['sidx']:'order_id';
$sord = isset($_GET['sord'])?$_GET['sord']:'desc';
if(!$sidx) $sidx =1;
$count = $this->db->count_all_results('tbl_order');
if( $count > 0 && $limit > 0) {
$total_pages = ceil($count/$limit);
} else {
$total_pages = 0;
}
if ($page > $total_pages) $page=$total_pages;
$start = $limit*$page - $limit;
if($start <0) $start = 0;
$i=0;
$query = $this->dashboard_model->fetchAllorders($start,$limit,$sidx,$sord);
$responce->page = $page;
$responce->total = $total_pages;
$responce->records = $count;
$i=0;
foreach($query as $row) {
$responce->rows[$i]['id']=$row->order_id;
$responce->rows[$i]['cell']=array($row->order_status,$row->order_auto_id,$row->date,$row->address,$row->borrower);
$i++;
}
$data['order_data'] = json_encode($responce);
$data['main_content'] = 'dashboard/loadDataGrid';
$this->load->view('lib/template', $data);
}
код модели идет здесь
function fetchAllorders($start,$limit,$sidx,$sord,$where=''){
$this->db->select('order_id,order_status,order_auto_id,date,address,borrower');
$this->db->limit($limit);
if($where != NULL)
$this->db->where($where,NULL,FALSE);
// $this->db->order_by($sidx,$sord);
$query = $this->db->get('tbl_order',$limit,$start);
return $query->result();
}
И, наконец, код представления здесь
<link rel='stylesheet' type='text/css' href='http://code.jquery.com/ui/1.10.3/themes/redmond/jquery-ui.css' />
<link rel='stylesheet' type='text/css' href='http://www.trirand.com/blog/jqgrid/themes/ui.jqgrid.css' />
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type='text/javascript' src='http://www.trirand.com/blog/jqgrid/js/jquery-ui-custom.min.js'></script>
<script type='text/javascript' src='http://www.trirand.com/blog/jqgrid/js/i18n/grid.locale-en.js'></script>
<script type='text/javascript' src='http://www.trirand.com/blog/jqgrid/js/jquery.jqGrid.js'></script>
<?php
$ci =& get_instance();
$base_url = base_url();
?>
<script>
$(document).ready(function () {
$("#list_records").jqGrid({
url: '<?php echo $base_url.'dashboard/loadDataGrid'?>',
datatype: "json",
mtype: "GET",
colNames: ['Status','Order number','Date','Address','Name'],
colModel: [
{ name: "order_status",align:"right"},
{ name: "order_auto_id"},
{ name: "date"},
{ name: "address"},
{ name: "borrower"}
],
pager: "#perpage",
rowNum: 10,
rowList: [10,20,50,100],
sortname: "order_id",
sortorder: "desc",
height: 'auto',
viewrecords: true,
gridview: true,
caption: ""});
});
</script>
<table id="list_records"><tr><td></td></tr></table>
<div id="perpage"></div>
Но когда я попытался напечатать результаты в контроллере, он показывает как
{"page":1,"total":11674,"records":116732,"rows":[{"id":"1","cell":["","921018","0000-00-00","11343 xxx",""]},{"id":"2","cell":["","921017","0000-00-00","15422 yyy",""]},{"id":"3","cell":["","921016","0000-00-00","930 zzz",""]},{"id":"4","cell":["","921015","0000-00-00","2798 aaa",""]}]}
Когда я работал с PHP, данные с jqgrid поступали правильно. Меня пытались во многих отношениях исправить это в CodeIgniter, но я не смог найти решение. Может кто-нибудь, пожалуйста, предложить по этому вопросу.
Спасибо большое.
Привет, я не вижу, куда вы возвращаетесь (вывод возврата json из loadDataGrid). Вы загружаете это представление, но что это?
$this->load->view('lib/template', $data);
Если это файл с html, это не сработает. Я вижу это как источник JSON
url: '<?php echo $base_url.'dashboard/loadDataGrid'?>',
И похоже, что он отображает HTML для страницы, когда он должен просто вернуть результат в виде строки json. Вы также хотите правильный заголовок header('Content-type: application/json');
в этом файле и вернуть только json. Я ожидаю что-то подобное для источника JSON
header('Content-type: application/json');
... other code here ...
echo json_encode($responce);
Не возвращать представление HTML с JSON, встроенным в массив. Есть смысл?
По сути, вам понадобятся эти части,
HTML Content
1.Controller method for HTML page
2.View for HTML page ( output )
JSON Content
1.Controller for JSON data source ( output )
2.Model for JSON
Другой способ это сделать — где в вашем коде вы выводите это $data['order_data']
Я нигде этого не вижу. Поэтому я подозреваю, что вы вводите в сетку HTML-код своей страницы, а не просто строку JSON.
Других решений пока нет …