Почему мой вызов AJAX не работает?

У меня есть аналогичный код, работающий из файла functions.php темы, но я хочу переместить его в плагин. Я собрал следующее, но по какой-то причине этот метод вызывает проблемы при вызове AJAX и всегда возвращает ноль.

Цель здесь состоит в том, что форма будет находиться на интерфейсе и может использоваться либо зарегистрированными, либо НЕ зарегистрированными пользователями.

Вот мой код плагина:

/* Plugin Name: AAA Hello World Plugin URI: http://helloworld.com Description: AJAX response to form submission Version: 1.0 Author: John Doe Author URI: http://helloworld.com */ class RespondToMyClicks { function __construct() { add_action( 'wp_enqueue_scripts', array( &$this, 'click_response_styles' ) ); add_action( 'wp_enqueue_scripts', array( &$this, 'click_response_scripts' ) ); if( is_admin() ) { add_action( 'wp_ajax_the_ajax_hook', array( &$this, 'process_clicky_form' ) ); add_action( 'wp_ajax_nopriv_the_ajax_hook', array( &$this, 'process_clicky_form' ) ); } add_shortcode( 'click_response_form', array( &$this, 'click_response_form' ) ); } public function click_response_styles() { wp_register_style( 'respond-to-my-clicks', plugins_url( dirname( plugin_basename( __FILE__ ) ) . '/styles.css' ) ); wp_enqueue_style( 'respond-to-my-clicks' ); } public function click_response_scripts() { wp_enqueue_script( 'respond-to-my-clicks', plugin_dir_url( __FILE__ ) . 'ajax.js', array( 'jquery' ) ); wp_localize_script( 'respond-to-my-clicks', 'the_ajax_script', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } public function process_clicky_form() { if( !empty( $_POST ) && wp_verify_nonce( $_POST['post_filtration'], 'post_filter_action' ) ) { echo "Hello World"; die(); } } public function click_response_form() { $the_form = '<form id="theForm" method="post" action="">' . wp_nonce_field( 'post_filter_action', 'post_filtration' ) . '<input name="action" type="hidden" value="the_ajax_hook" /> <label class="check"><input type="checkbox" name="change_me" value="" onChange="submit_me();" /> Click me for a response</label> </form> <div id="response_area"></div>'; return $the_form; } } new RespondToMyClicks(); 

И вот мой код файла Javascript:

  function submit_me() { jQuery("#response_area").fadeOut("slow"); jQuery.post(the_ajax_script.ajaxurl, jQuery("#theForm").serialize(), function(response_from_the_action_function){ jQuery("#response_area").html(response_from_the_action_function).fadeIn("fast"); } ) } 

Я слишком долго смотрел на это и пробовал разные варианты кода, поэтому, надеюсь, кто-то может указать на очевидное, потому что я просто пропустил его. Благодаря!

Solutions Collecting From Web of "Почему мой вызов AJAX не работает?"

Хорошо, так что ТЕПЕРЬ У меня есть все решение. Это было две вещи:

  1. Кэширование было первой частью проблемы. Очищенный кеш, деактивированный кеширующий плагин для времени.
  2. Вторая, менее очевидная проблема заключалась в том, что для НЕ зарегистрированных пользователей ответ от вызова AJAX возвращал весь HTML-документ в области ответа. Оказывается, у меня была функция «перенаправления» в файле functions.php, который вызывал это. Он предназначен для перенаправления пользователей ниже автора обратно в интерфейс, чтобы они никогда не обращались к бэкэнд, а администратор-ajax.php технически работает со стороны администратора, так что это было проблемой.