以下是DataTable模块中table-ajax.js文件的片段。 我的问题是,如果我在Controller中使用IndexAction {},那么将是Ajax url而不是 table_ajax.php 。我想显示数据库中的数据。
var handleRecords = function () {
var grid = new Datatable();
grid.init({
src: $("#datatable_ajax"),
onSuccess: function (grid) {
},
onError: function (grid) {
},
onDataLoad: function(grid) {
},
loadingMessage: 'Loading...',
dataTable: {
"bStateSave": true, // save datatable state(pagination, sort, etc) in cookie.
"lengthMenu": [
[10, 20, 50, 100, 150, -1],
[10, 20, 50, 100, 150, "All"] // change per page values here
],
"pageLength": 10, // default record count per page
"ajax": {
"url": "table_ajax.php", // ajax source
},
"order": [
[1, "asc"]
]// set first column as a default sort by asc
}
});
答案 0 :(得分:1)
首先,您需要向viewmanager添加策略,以便返回json。这是在你的module.config中完成的,如下所示:
'view_manager' => array(
...
'strategies' => array(
'ViewJsonStrategy'
),
...
),
我假设你已经通过Autoloader导入了这个DataTableModule。因此,您可以在控制器中扩展或实现“table_ajax.php”,并覆盖/添加返回值作为zf2 JsonModel。
在Controller中的Action中,扩展/实现ajax_table.php
...
return new JsonModel($whateverTheResultIs);
...
现在您有一个返回JSON的控制器,您需要设置一条路线。这很简单,它只链接到你的控制器动作,因为你在Viewmanager中定义了一个策略,ZF2会为你做剩下的讨厌的ajax。
编辑:而不是在控制器中扩展table_ajax.php,编写一个从table_ajax.php中检索信息的服务可能是个好主意。