Я получаю эту ошибку:
POST http://localhost/wptest2/wp-admin/admin-ajax.php 400 (Bad Request)
(anonymous) @ VM12565:1
send @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
ajax @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
(anonymous) @ options-general.php?page=fvc-settings:784
dispatch @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:3
r.handle @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:3
- В приведенном ниже коде ajaxPost () подключен к нижнему колонтитулу администратора моего
плагин.
- При нажатии на кнопку, выбранную jQuery, он должен запустить зарегистрированный почтовый запрос и вернуть простой ответ.
Это не то, что происходит с jQuery.post () или $ .ajax (). Я попробовал несколько вещей, упомянутых ниже в комментариях, но не могу заставить его работать, кто-нибудь может рассказать о проблеме?
function ajaxPost() {
?>
<script>
jQuery(document).ready(function($) {
$('#previousButton').click(function() {
var postData = {
action : 'selectTargetsWithOffset',
data : {
offsetMultiplier : 1,
incrementSize : 10
},
success : function(response) {
console.log(`=====jQuery success=====`);
}
};
var handleResponse = function(response) {
console.log(response, `=====response=====`);
};
jQuery.post(ajaxurl, postData, handleResponse);
// this code also threw a 400 error when
// I commented out the above code instead
// $.ajax({
// type: "POST",
// url: ajaxurl,
// dataType: "json",
// data: {
// action: "selectTargetsWithOffset",
// },
// success: function() {
// console.log(response, `=====response
// from $.ajax}=====`);
// }
// });
})
})
</script>
<?php
}
add_action('admin_footer', 'ajaxPost');
function selectTargetsWithOffset() {
wp_send_json([ 'message' => 'from back end' ]);
wp_die();
}
add_action('wp_ajax_selectTargetsWithOffset', 'selectTargetsWithOffset');
Также попробовал
- Зайдите в admin-ajax.php и измените код ответа с 400 на 420, чтобы посмотреть, что он будет делать. Я получил странную ошибку, отражающую изменение.
if ( is_user_logged_in() ) {
// If no action is registered, return a Bad Request response.
if ( ! has_action( "wp_ajax_{$action}" ) ) {
wp_die( 'Test', 420 );
}
Добавление следующего к началу admin-ajax.php:
?>
<script>
console.log(`=====TEST=====`);
var request = "<?php echo $_REQUEST ?>";
console.log(request['action'], `=====request=====`);
</script>
<?php
Когда я пытаюсь инициировать вызов ajax в моей административной области, я все равно получаю только журнал консоли 400 неверных ответов. Однако, когда я непосредственно перехожу на URL, теперь я вижу оператор === TEST ===, и запрос помечается как неопределенный (как я и ожидал). Я понимаю, что это означает что-то о том, что я называю запрос ajax неверным.
Вот мой HTML-код для кнопки, которая выполняет вызов:
<button id="previousButton">Previous</button>
В ответ на предложение по упрощенному обратному вызову
Вот консольный журнал:
=====jQuery success=====
VM13659:1 POST http://localhost/wptest2/wp-admin/admin-ajax.php 400 (Bad Request)
(anonymous) @ VM13659:1
send @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
ajax @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
n.(anonymous function) @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:4
(anonymous) @ options-general.php?page=fvc-settings:785
dispatch @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:3
r.handle @ load-scripts.php?c=0&load[]=jquery-core,jquery-migrate,utils&ver=5.1.1:3
А вот и код:
function ajaxPost() {
?>
<script>
jQuery(document).ready(function() {
jQuery('#previousButton').click(function() {
var postData = {
action : 'selectTargetsWithOffset',
data : {
offsetMultiplier : 1,
incrementSize : 10
},
success : function(response) {
console.log(`=====jQuery success=====`);
}
};
var handleResponse = function(response) {
console.log(response, `=====response=====`);
};
jQuery.post(ajaxurl, postData, handleResponse);
});
})
</script>
<?php
}
add_action('admin_footer', 'ajaxPost');
function selectTargetsWithOffsetcb() {
print_r($_POST);
die();
}
add_action( 'wp_ajax_selectTargetsWithOffset', "selectTargetsWithOffsetcb");
add_action( 'wp_ajax_nopriv_selectTargetsWithOffset', "selectTargetsWithOffsetcb" );
На самой странице нет вывода print_r (), он остается прежним без какого-либо обновления
Стоит еще раз отметить, что код отладки ====TEST===
в admin-ajax.php не смог войти в систему. Я думаю, это означает, что запрос по какой-то причине не достигает этого файла (поскольку переход к этому файлу в браузере приводит к тому, что он входит в консоль)
Тоже пробовал, но тоже ошибка 400:
function ajaxPost() {
?>
<script>
jQuery(document).ready(function() {
jQuery(document).on("click","#previousButton", function() {
jQuery.ajax({
url: "<?php echo admin_url( 'admin-ajax.php' ) ?>",
data: {"action":"selectTargetsWithOffset","datas": {"name": "yourfields"}},
type:"post",
success: function(data) { alert(data); }
})
});
})
</script>
<?php
}
add_action('admin_footer', 'ajaxPost');