Как отправить ajax запрос и получить ответ от функции?
Я создал функцию внутри плагина. Я хочу вызвать ее с помощью jQuery ajax функции.
Функция определена следующим образом:
add_action( 'wp_ajax_my_test_ajax', 'my_test_ajax' );
add_action( 'wp_ajax_nopriv_my_test_ajax', 'my_test_ajax' );
function my_test_ajax() {
// Создаем массив с заголовком и содержимым
$resp = array('title' => 'вот заголовок', 'content' => 'вот содержимое') ;
wp_send_json($resp) ;
}
Затем я пытаюсь вызвать функцию из JavaScript:
var target = 'http://' + window.location.hostname + '/wp-admin/admin-ajax.php' ;
var data = {
action: ' my_test_ajax'
} ;
var req = jQuery.post( target , data, function(resp) {
console.log(resp.responseText);
}) ;
}
Сайт отвечает из admin-ajax.php. Ответ содержит заголовок '200 OK'. Тело ответа - '0'.
В документации WordPress говорится, что такой ответ можно получить, если значение 'action' в теле POST-запроса не соответствует имени функции, привязанной к хукам ajax WordPress. Но насколько я могу судить, у меня с этим все в порядке.
Я уверен, что функция включена в файл моего плагина.
Какие еще минимальные требования нужны, чтобы это заработало?
(Я пока не хочу беспокоиться о nonces или локализации js. Я просто хочу получить ответ от функции, прежде чем продолжить дальнейшую разработку)

$.ajax
очень прост, и вы можете легко добавить дополнительные параметры в строку data: {action:'my_test_ajax'}
, попробуйте так:
var target = 'http://' + window.location.hostname + '/wp-admin/admin-ajax.php';
$.ajax({
url: ajax,
data: {action:'my_test_ajax'},
type: 'post',
success: function(data){
console.log(data, data.title, data.content)
}
});
Убедитесь, что target
указывает точно на admin-ajax.php
или задайте глобальную переменную (или используйте локализацию скрипта) для хранения пути к admin-ajax.php
, который в случае сомнений можно получить через admin_url('admin-ajax.php')
.
$.ajax
по умолчанию парсит JSON-данные. Если вы работаете с другими методами, которые возвращают ответ как есть (в виде строки), просто используйте метод JSON.parse(response)
. Это связано с тем, что вы используете wp_send_json($resp)
, который возвращает ответ в формате JSON на стороне сервера.
Вот пример добавления дополнительных данных в запрос:
Используйте метод append
для переменной данных или сохраните его коротким и простым, например: data: {action:'my_test_ajax', name: 'dave', network: 'wpse'}
. В функции my_test_ajax
вы можете получить эти данные через $_REQUEST[tag]
, например: $_REQUEST['name']
.
Метод $.get
( $_GET
):
Этот метод ещё проще и требует меньше кода:
$.get( target = '/wp-admin/admin-ajax.php?action=my_test_ajax', function( data ) {
console.log( data )
});
Не забывайте использовать $_REQUEST
в вашем PHP-скрипте, так как он объединяет все наборы данных $_GET
, $_POST
и $_COOKIE
. Разумеется, если вы уверены в используемом методе, можно обойтись без него.
Надеюсь, это поможет.
