Как запустить AJAX по клику на кнопку?
Обновление: Мне удалось заставить AJAX работать, но не в обработчике клика. Я обновил вопрос соответственно.
Я пытаюсь использовать код, который нашел на странице: 'AJAX в плагинах'.
Однако я не могу заставить его работать и не знаю, с чего начать поиск проблемы. Код работает, когда я убираю функцию клика и просто запускаю его при загрузке страницы.
У меня есть JavaScript файл, который выглядит так:
jQuery(document).ready(function(){
jQuery("#createremotesafe").click(function(){
alert ('test');
var data = {
action: 'my_action',
whatever: 1234
};
// начиная с версии 2.8 ajaxurl всегда определен в заголовке админки и указывает на admin-ajax.php
jQuery.post(ajaxurl, data, function(response) {
alert('Получено с сервера: ' + response);
});
});
});
и где-то в моем PHP скрипте, который генерирует кнопку, которая должна выполнить JavaScript (т.е. страница админки), и остальную часть страницы:
add_action('wp_ajax_my_action', 'my_action_callback');
echo 'test2';
function my_action_callback() {
global $wpdb; // так вы получаете доступ к базе данных
$whatever = $_POST['whatever'];
$whatever += 10;
echo $whatever;
die(); // это необходимо для возврата корректного результата
}
Я получаю и Alert ('test')
и echo 'test2'
, но не получаю алерт с ответом. JavaScript ошибок нет. Мой код определенно выполняется, так как я вижу оба 'test', но почему AJAX не получает никакого ответа?
Может быть моя PHP функция исчезает после загрузки страницы? Возможно, я не могу/не должен использовать встроенные функции AJAX WordPress?
Также не показывается пустой алерт, просто ничего не происходит.

Начните с рабочей кодовой базы..
add_action('in_admin_header', 'my_ajax_button');
function my_ajax_button() {
echo '<a href="#ajaxthing" class="myajax">Тест</a>';
}
add_action('admin_head', 'my_action_javascript');
function my_action_javascript() {
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
$('.myajax').click(function(){
var data = {
action: 'my_action',
whatever: 1234
};
// начиная с версии 2.8 ajaxurl всегда определен в заголовке админки и указывает на admin-ajax.php
$.post(ajaxurl, data, function(response) {
alert('Получено от сервера: ' + response);
});
});
});
</script>
<?php
}
add_action('wp_ajax_my_action', 'my_action_callback');
function my_action_callback() {
global $wpdb; // так вы получаете доступ к базе данных
$whatever = $_POST['whatever'];
$whatever += 10;
echo $whatever;
exit(); // это необходимо для возврата правильного результата & exit работает быстрее чем die();
}
Это код (с небольшой корректировкой) со страницы кодекса, и он мне полностью подходит, поэтому я предлагаю использовать его как отправную точку.. если вы изначально делали именно так, в какой момент он сломался или перестал работать?
ПРИМЕЧАНИЕ: Mark - это я, я использую дополнительный аккаунт при доступе к сайту с другого ПК (который не мой).

Это работает до тех пор, пока я не пытаюсь добавить Javascript к событию клика по кнопке, а не к загрузке страницы. Код выполняется, потому что я получаю алерт, но Ajax-функция, вероятно, исчезает после загрузки страницы.

Вы ранее путали переменные, с функцией клика всё работает отлично, см. мой обновлённый код выше (рабочий пример).

Кажется, я пропустил часть кода в обновлённом примере, там отсутствует add_action( 'in_admin_header', 'my_ajax_button' );
в начале кода, к сведению.

Мне удалось заставить это работать, следуя вашему совету, спасибо. Странно, что я получил оба своих 'тестовых' сообщения, а код не работал, потому что я не могу представить, что я делаю по-другому сейчас.
