Ошибка 400 (Bad Request) при ajax-запросе в WordPress
Битый час потратил на реализацию простейшего ajax запроса. Выкинул все запросы к БД из кода. Уже просто пробую пример из Codex'а, и то выдаёт ошибку:
<?php
add_action( 'admin_footer', 'my_action_javascript' );
function my_action_javascript() { ?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
var data = {
'action': 'ajaxresponse',
'whatever': 1234
};
jQuery.post(ajaxurl, data, function(response) {
alert('Got this from the server: ' + response);
});
});
</script>
<?php } ?>
<?php
add_action( 'wp_ajax_ajaxresponse', 'ajax_function' );
add_action( 'wp_ajax_nopriv_ajaxresponse', 'ajax_function' );
function ajax_function() {
global $wpdb;
$whatever = intval( $_POST['whatever'] );
$whatever += 10;
echo $whatever;
wp_die();
}
?>
В чём может быть проблема?
Ответы (2 шт):
Автор решения: Jack Daniel
→ Ссылка
jQuery.post(ajaxurl... - эта переменная должна показывать путь к файлу wp-admin/admin-ajax.php. Здесь только название, которое никуда не ведет. Надо передать этот параметр через хук и функцию, что то типа:
add_action("init", 'get_yandex_data');
function get_yandex_data(){
$vars = [
'ajax_url' => admin_url('admin-ajax.php')
];
echo "<script>window.wp = ".json_encode($vars). " </script>";
wp_die();
}
А пото указать ее, в качестве пути:
$.ajax ({
url: window.wp.ajax_url,
data: action //ваш обработчик
Автор решения: Артём Свистула
→ Ссылка
В общем, проблема решилась накатом предыдущей версии WordPress 5.3 поверх текущей 5.4. Что был за глюк, до сих пор не знаю. В ядре никто не копался.