I'm creating one plugin to get data from custom table using datatable server side scripting.
In query i'm getting right response but in ajax function call getting 400 bad request
Request URL: http://localhost/Project_name/wp-admin/admin-ajax.php Request Method: POST Status Code: 400 Bad Request Remote Address: [::1]:80
my ajax js file
$(document).ready(function() {
var dataTable = $('#employee-grid').DataTable( {
"processing": true,
"serverSide": true,
dataType: "json",
contentType: "application/json",
"ajax":{
"url" : 'admin-ajax.php',
"type": "POST",
"data": {action: 'my_action'},
error: function(){ // error handling
$(".employee-grid-error").html("");
$("#employee-grid").append('<tbody class="employee-grid-error"><tr><th colspan="3">No data found in the server</th></tr></tbody>');
$("#employee-grid_processing").css("display","none");},
success: function(data){
alert(data);
}
},
"columns": [
{"data": "employee_name"},
{"data": "employee_salary"},
{"data": "employee_age"}
], "columnDefs": [
//{"orderable": false, "targets": 12}
]
} );
} );
in ajax file also adding wp_ajax_my_action and wp_ajax_nopriv_my_action action.
ajaxfile function file
add_action( 'wp_ajax_my_action', 'my_action' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action' );
function my_action() {
global $wpdb;
## Read value
$draw = $_POST['draw'];
$row = $_POST['start'];
$rowperpage = $_POST['length']; // Rows display per page
$columnIndex = $_POST['order'][0]['column']; // Column index
$columnName = $_POST['columns'][$columnIndex]['data']; // Column name
$columnSortOrder = $_POST['order'][0]['dir']; // asc or desc
$searchValue = $_POST['search']['value']; // Search value
## Search
$searchQuery = " ";
if($searchValue != ''){
$searchQuery = " and (reportNo like '%".$searchValue."%' or ) ";
}
$totalRecordwithFilter = $records['allcount'];
## Total number of records without filtering
$sel = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'employee');
$totalRecords = count($sel);
## Total number of records with filtering
/* $sel = mysqli_query($con,"select count(*) as allcount from employee WHERE 1 ".$searchQuery);
$records = mysqli_fetch_assoc($sel); */
$resultCount = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'employee where '.$searchQuery);
$totalRecordwithFilter = count($resultCount);
## Fetch records
//$empQuery = "select * from employee WHERE 1 ".$searchQuery." order by ".$columnName." ".$columnSortOrder." limit ".$row.",".$rowperpage;
$empRecords = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'employee where '.$searchQuery.' order by ' . $columnName . ' ' . $columnSortOrder . ' limit ' . $row . ',' . $rowperpage);
$empRecords = mysqli_query($con, $empQuery);
$data = array();
foreach ($sel as $row) {
$data[] = array(
"emp_name"=>$row->employee_name,
"salary"=>$row->employee_salary,
"age"=>$row->employee_age
);
}
## Response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $totalRecords,
"iTotalDisplayRecords" => $totalRecordwithFilter,
"aaData" => $data
);
echo json_encode($response);
exit();
}