Извините за короткий ответ, я постараюсь добавить несколько подробностей, если у меня найдется время для этого.
Это действие контроллера, которое я использовал в проекте много лет назад.
Вы должны указать в Controller :: init(), что ваш datatableAction должен будет вернуть JSON вместо визуализированного сценария представления.
/**
* Initialise Controller
*
* @return void
*/
public function init() {
/*
* Set Request/Response Context (HTML,XML,JSON) for Ajax Request
* Add ?format=json to URL e.g. http://test.com/test?format=json
*/
$this->_helper ->contextSwitch()
//add context for datatablesAction() Response is JSON
->addActionContext('datatable', 'json')
->initContext();
parent::init();
}
Это мое действие, которое в настоящее время используется, если я получу время, я изменю его, чтобы оно соответствовало вашим именам переменных.
/**
* Get evn records via AJAX call converted to jquery datatable format
*
* @link http://www.datatables.net/
*
* @return void
*/
protected function datatableAction() {
/* @var $request Zend_Controller_Request_Http */
$request = $this->getRequest();
/* @var $cache Zend_Session_Namespace */
$cache = new Zend_Session_Namespace("cache");
$array = $cache->{$module};
$selected = $array["selected"];
/* @var $cdrFactory Evn_Model_RecordsFactory */
$cdrFactory = new Evn_Model_RecordsFactory();
//set request object attributes via magic setter from caches selection array
$cdrFactory->account = $selected["account"];
$cdrFactory->direction = $selected["direction"];
$cdrFactory->date_start = $selected["date_start"];
$cdrFactory->date_end = $selected["date_end"];
//get sEcho from Request Object (default 1)
$page = $request->getParam("sEcho", 1);
$page = ($page<1) ? 1 : $page;
//set view variable (auto json format via contextswitch)
$this->view->sEcho = $page;
//calculate limit start
$from = ($page>1) ? (($page-1) * $selected["entries"]) : 0;
//calculate limit end
$end = ($from + $selected["entries"])-1;
//set records limit start
$cdrFactory->limit_begin = $from;
//set records limit end
$cdrFactory->limit_end = $end;
//request records
$records = $cdrFactory->fetch();
//get size of retrieved records
$total = $cdrFactory->getSize();
//set view variable (auto json format via contextswitch)
$this->view->iTotalRecords = $total;
$this->view->iTotalDisplayRecords = $total-(($end-$from)+1);
//set view variable (auto json format via contextswitch)
$this->view->sColumns = "call_start,a_partynumber,b_partynumber,seconds,direction,price_complete,price_minute,price_call";
//create array in datatables format
$aaData = array();
foreach($records as $record) {
//get plain array 0-x
$aaData[] = array_values($record);
}
//set view variable (auto json format via contextswitch)
$this->view->aaData = $aaData;
}
Посмотрите на https://www.datatables.net/manual/server-side для более INFORS, о которых параметры JSON ваши действия могут или нужно вернуться.
Просто добавьте вары в виде $ this-> view -> [varname], переключатель контекста JSON будет обрабатывать выходные данные и заголовки автоматически.
Удачи!
Благодарим за отзыв! Но я так новичок в этом, вы можете просто дать мне простой пример, похожий на мой код. – user2986673