WordPress Admin AJAX не работает, возвращая всю HTML-страницу

У меня есть следующий код в моем functions.php файл.

wp_enqueue_script( 'broadcast-ajax-request', get_template_directory_uri() . '/js/global.js', array( 'jquery' ) );
wp_localize_script( 'broadcast-ajax-request', 'ajaxadmin', array('ajaxurl'=> admin_url( 'admin-ajax.php' )));

add_action( 'wp_ajax_get_my_option', 'get_my_option' );
add_action( 'wp_ajax_nopriv_get_my_option', 'get_my_option' );

function get_my_option()
{
print_r($_POST); exit;
}

И следующий код в global.js,

jQuery('document').ready(function(){
jQuery("#submit_btn").click(function(){
jQuery.ajax({
url: ajaxadmin.ajaxurl,
data: {'action':'get_my_option', 'test':'test'},
type: "POST",
success: function(response){
}
});
});
});

Но оно всегда возвращается html код в ответ.

0

Решение

Сценарии и локализации сценариев должны выполняться в wp_enqueue_scripts Хук действия:

function so_34632421_enqueue_scripts() {
wp_enqueue_script( 'broadcast-ajax-request', get_template_directory_uri() . '/js/global.js', array( 'jquery' ) );
wp_localize_script( 'broadcast-ajax-request', 'ajaxadmin', array('ajaxurl'=> admin_url( 'admin-ajax.php' )));
}
add_action('wp_enqueue_scripts', 'so_34632421_enqueue_scripts');

Прочитайте больше в Кодексе.

0

Другие решения

Это определенно поздний ответ, но, надеюсь, он может кому-то помочь.

Когда вы локализуете административный URL-адрес WordPress, вы устанавливаете переменную, которая WordPress вставляет на вашу страницу следующим образом:

/* <![CDATA[ */
var bookingajax = {"ajax_url":"http:\/\/localhost:8888\/wp-admin\/admin-ajax.php"};
/* ]]> */

Когда admin-ajax.php является бэкендом вашего плагина, переменная adminajax устанавливается так:

var ajaxurl = '/gss/wp-admin/admin-ajax.php',

Лучший способ проверить, локализован ли URL-адрес ajax, — вывести на консоль заданную вами переменную.

В моем примере я установил локализованный файл admin-ajax.php с помощью bookingajax.

если вы напечатаете эту переменную в console.log (bookingajax), вы увидите, что теперь она хранится в объекте javascript.

И вот решение!

В приведенном выше примере вы все еще используете переменную adminajax. Вам нужно будет добавить подчеркивание, которое установлено в переменной, хранящейся во внешнем интерфейсе, как таковой.

var ajaxurl = bookingajax.ajax_url;

jQuery.ajax({
url: ajaxurl,
data: {'action':'get_my_option', 'test':'test'},
type: "POST",
success: function(response){
}
});
0