我正在创建一个插件,以使用数据表服务器端脚本从自定义表中获取数据。
在查询中我得到正确的响应,但是在ajax函数调用中得到了400个错误的请求
请求网址:http://localhost/Project_name/wp-admin/admin-ajax.php 请求方法:POST 状态码:400错误请求 远程地址:[:: 1]:80
我的Ajax js文件
$(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}
]
} );
} );
在ajax文件中还添加了wp_ajax_my_action和wp_ajax_nopriv_my_action操作。
ajaxfile函数文件
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();
}
答案 0 :(得分:5)
更新 当我检查您使用的POST方法中不存在的参数时,您需要添加它们并检查它们是否存在
您应该使用这样的ajax函数传递POST参数
data: {
action: 'search_enrollment_by_scode',
draw : 'draw',
row : 'start',
rowperpage : 'length',
columnIndex : 'order',
columnName : 'columns',
columnSortOrder : 'order',
searchValue : 'search',
}
注意:您应添加有效数据或变量
您的PHP文件
<?php
add_action( 'wp_ajax_my_action', 'my_action' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action' );
function my_action() {
global $wpdb;
## Read value
// you need to check that you have this data or not
// you just add action data not any of bellow list
if ($_POST['draw']) {
$draw = $_POST['draw'];
.
.
.
.
.
.
.
echo json_encode($response);
}
else
{
echo json_encode('Data is invalid or not complete');
}
exit();
}
?>
尝试此操作,然后在您的"url" : 'admin-ajax.php',
<script type="text/javascript">
var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
</script>
如Wordpress AJAX文档中所述,您有两个不同的钩子-wp_ajax_(action)和wp_ajax_nopriv_(action)。它们之间的区别是:
wp_ajax_(action):如果从管理面板内部进行ajax调用,则将触发此事件。 wp_ajax_nopriv_(action):如果从网站的前端进行了ajax调用,则将触发该事件。