问题描述
我正在尝试在我的 CI4 应用程序中使用 DataTable。我需要使用服务器端处理来显示数据。我在浏览器的调试模式下收到 403 Forbidden。这是我正在使用的代码段;
我的路线
$routes->match(['get','post'],'ajaxLoadData','vendor::ajaxLoadData');
我的控制器
public function index ()
{
$data['Title'] = vendors Management Section';
$data['heading1'] = vendors Management Section';
$locale = $this->request->getLocale();
$this->session = \Config\Services::session();
$session = $this->session->get();
$assignData=array"locale"=>$locale,"data"=>$data);
echo view ("dashboard/includes/header_admin",$assignData);
echo view ("dashboard/includes/navbar_admin",$assignData);
echo view ("dashboard/mac_home",$assignData);
echo view ("dashboard/includes/footer_admin",$assignData);
}
/***********************************************************************
Dashboard - Ajax Load vendors Data
***********************************************************************/
public function ajaxLoadData()
{
// POST data
$postData = $this->request->getPost();
// Get data
$db = db_connect();
$ManageModel = new ManageModel($db);
$data = $ManageModel->ajaxMacaData($postData);
return $this->response->setJSON($data);
exit;
}
我的模特
function ajaxMacaData($postData=null) {
$response = array();
## Read value
$draw = $postData['draw'];
$start = $postData['start'];
$rowperpage = $postData['length']; // Rows display per page
$columnIndex = $postData['order'][0]['column']; // Column index
$columnName = $postData['columns'][$columnIndex]['data']; // Column name
$columnSortOrder = $postData['order'][0]['dir']; // asc or desc
$searchValue = $postData['search']['value']; // Search value
## Search
$searchQuery = "";
if($searchValue != ''){
$searchQuery = " (mac_id like '%".$searchValue."%' or
mac_prefix like '%".$searchValue."%' or
mac_vendor like'%".$searchValue."%' ) ";
}
## Total number of records without filtering
$this->db->select('count(*) as allcount');
$records = $this->db->get('dkb_macvendors')->result();
$totalRecords = $records[0]->allcount;
## Total number of record with filtering
$this->db->select('count(*) as allcount');
if($searchQuery != '')
$this->db->where($searchQuery);
$records = $this->db->get('dkb_macvendors')->result();
$totalRecordwithFilter = $records[0]->allcount;
## Fetch records
$this->db->select('*');
if($searchQuery != '')
$this->db->where($searchQuery);
$this->db->order_by($columnName,$columnSortOrder);
$this->db->limit($rowperpage,$start);
$records = $this->db->get('dkb_macvendors')->result();
$data = array();
foreach($records as $record ){
$data[] = array(
"mac_id"=>$record->mac_id,"mac_prefix"=>$record->mac_prefix,"mac_vendor"=>$record->mac_vendor,"mac_type"=>$record->mac_type,"mac_status"=>$record->mac_status
);
}
## Response
$response = array(
"draw" => intval($draw),"iTotalRecords" => $totalRecords,"iTotaldisplayRecords" => $totalRecordwithFilter,"aaData" => $data
);
return $response;
}
我的 mac_home HTML
<div class="row">
<div class="table-responsive">
<table id="mac_dataTable" class="table table-hover">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Prefix</th>
<th>Type</th>
<th>Status</th>
</tr>
</thead>
</table>
</div>
</div>
我的 JavaScript 来初始化 DataTable 并发送 Post Ajax 请求
<script type="text/javascript">
$(document).ready(function(){
// var token = data.csrf;
// $.ajaxSetup({
// data: csfrData
// });
$('#mac_dataTable').DataTable({
'processing': true,'serverSide': true,'serverMethod': 'post','ajax': {
'url': '<?PHP echo base_url()."/".$locale."/dashboard/mac/ajaxLoadData"; ?>',//"dataSrc": ""
},'columns': [
{ data: 'mac_id' },{ data: 'mac_prefix' },{ data: 'mac_vendor' },{ data: 'mac_type' },{ data: 'mac_status' },]
});
});
</script>
我尝试了各种可用的解决方案,并解决了许多问题/答案。由于站点安全,我无法禁用 CRSF 或也无法更改重新生成选项。非常感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)