ajax - 使用数据表服务器端脚本 Wordpress 调用 ajax 函数时出现 400 Bad Request
问题描述
我正在创建一个插件来使用数据表服务器端脚本从自定义表中获取数据。
在查询中我得到正确的响应但在 ajax 函数调用中得到 400 错误请求
请求 URL: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();
}
解决方案
更新 当我检查您使用 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();
}
?>
试试这个,然后替换你的 ajaxurl 变量"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 调用是从网站的前端进行的,则会触发此事件。
推荐阅读
- python - 如何在python中等待关闭的端口
- aws-cdk - Aws-cdk addEventsource 失败
- python - 如何将图像中最接近主色的这种分类即兴为给定的颜色列表?
- python - 如何避免打印在 Python 中调用异常或警告的行?
- flask - 如何通过(转换)Json 格式的数据作为 Graphql 查询和过滤数据烧瓶石墨烯
- asp.net - 如何在 ASP.NET api 中获取所有模型验证错误
- javascript - 观察可构造样式表的变化
- html - 如果用户在字段无效时尝试提交表单,如何为选择表单字段提供红色边框
- django - 由于“无法安装 postgresql95-devel”,无法在 Elastic Beanstalk 上将 django 部署到 python 3.8/Linux 2
- c# - 为 ICollection 设置默认值
C#中DTO的属性