Получение 400 неверных запросов при вызове функции ajax с использованием сценариев на стороне сервера Wordpress - PullRequest
1 голос
/ 08 апреля 2019

Я создаю один плагин для получения данных из пользовательской таблицы, используя датируемые сценарии на стороне сервера.

В запросе я получаю правильный ответ, но при вызове функции 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();
}

1 Ответ

5 голосов
/ 08 апреля 2019

ОБНОВЛЕНИЕ Поскольку я проверял, что вы используете параметры, которые не существуют в вашем методе POST, вам нужно добавить их, а также проверить, что они существуют

, вы должны передать вам параметры POSTс такой функцией ajax

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_ (действие) и wp_ajax_nopriv_ (действие).Разница между ними такова:

wp_ajax_ (действие): Это срабатывает, если вызов ajax выполняется из панели администратора.wp_ajax_nopriv_ (action): запускается, если вызов ajax выполняется из внешнего интерфейса веб-сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...