Intereting Posts
Вопросы о мета-поле: нет и параметры доступны Восстановить блог WordPress от неактивного имени домена Одновременное обновление администратора приводит к тому, что настраиваемые поля не обновляются Проверьте зависимый плагин, и если false, не активируйте плагин Как показать один контент в другом сообщении, который имеет одинаковые условия? Как вытащить выдержки из страниц? Разработка до выбора имени домена как запрашивать сообщения и автоматически назначать категорию, если заголовок заголовка имеет ключевое слово Кнопка массового действия wp_list_table не работает – нет отправки Как можно глобально выделить выделенный текст? Как применять определенные плагины для воздействия на все сайты (Multisite Network) WP 3.0.5: Лучший способ добавить пользовательские обмены для почтовых категорий? Как выводить темы и ответы в bbpress как таблицу? Правила переписывания NGINX для многозвенных «ID» для тегов и категории

Admin-ajax.php умирает «0» без функции обработки

Я пытаюсь научиться правильно обрабатывать запросы AJAX в WordPress. Для этого я адаптирую этот учебник для создания супер простого запроса AJAX, чтобы поместить идентификатор сообщения (из ссылки) в содержимое моей страницы.

Логика

  1. Когда #our-work a ссылки нажимаются [js]
  2. Получите идентификатор сообщения (из атрибута data-id ) и сохраните его как переменную postID [js]
  3. Передайте postID через AJAX (используя файл admin-ajax.php WP) [js]
  4. Функция example_ajax_request подберет идентификатор и просто повторит его [php]
  5. В случае успеха добавьте ответ сервера в div #hero .

Я понимаю, что это не имеет никакой пользы, но как только у меня будет эта работа, я буду исправлять функцию, чтобы служить реальной цели.

Мой код

Вот копия функции, которую я создал в папке плагинов:

 wp_enqueue_script( 'my-ajax-request', plugin_dir_url( __FILE__ ) . 'acl-plugin.js', array( 'jquery' ) ); wp_localize_script( 'my-ajax-request', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); function example_ajax_request() { if ( isset($_REQUEST) ) { $postID = $_REQUEST['postID']; echo $postID; } die(); } add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' ); 

И вот копия файла JS

 jQuery(document).ready(function($) { $('#our-work a').click( function() { var postID = $(this).attr("data-id"); $.ajax({ url: MyAjax.ajaxurl, data: { 'action':'example_ajax_request', 'postID' : postID }, success:function(data) { $('#hero').append( "Well this seems to work" + data ); }, error: function(errorThrown){ console.log("This has thrown an error:" + errorThrown); } }); return false; }); }); 

Проблема

При нажатии на ссылку JS срабатывает, но дает следующий ответ:

 <div id="hero"> Well this seems to work 0 </div> 

Используя оповещение, я знаю, что идентификатор подбирается перед запросом AJAX. Так что проблема в моей функции. Чтобы узнать больше, я (временно) изменил файл admin-ajax.php WP, чтобы узнать, какой die(); давал ответ «0».

Это самый последний в файле, который, как я думал, не будет срабатывать, поскольку у меня есть die(); команда в моей собственной функции. Может кто-нибудь указать, где я ошибаюсь?

Это один из тех редких случаев, которые я могу с гордостью сказать … здесь нет никаких проблем!

Причина, по которой сервер возвращается с 0 состоит в том, что я вошел в систему! wp_ajax_nopriv_example_ajax_request предназначен только для пользователей, которые не вошли в систему. После выхода из системы это работает нормально.

Поэтому, если вы хотите сделать то же самое, просто убедитесь, что у вас есть оба действия ниже функции:

 add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' ); add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );