Intereting Posts
Показать сообщения за день Как добавить пользовательскую кнопку в список «edit»? (edit.php? post_type =) рядом с "Добавить новый" Как создать таблицу базы данных? используя стиль wp enqueue для создания файла CSS специально для шаблона страницы Включение специального типа сообщений в виджет Архивы Использование get_posts с аргументами, найденными в мета-ключах Как префикс post permalinks с / blog / – без влияния на пользовательские типы сообщений? Как определить составные клавиши с помощью dbDelta () wordpress на localhost lamp не позволяет мне устанавливать плагины Динамически добавлять / дублировать пользовательскую мета в пользовательских типах сообщений Удалить общий код стиль не работает в WordPress темы Остановить редактор WYSIWYG WordPress от преобразования «не» в «didn», «» «» «t»? Попытка использования add_action и do_action с параметрами Японские символы не отображаются должным образом

Почему мой вызов 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 технически работает со стороны администратора, так что это было проблемой.