Intereting Posts
Настройка мета-запроса с несколькими типами сообщений, которые имеют одинаковые отношения на одной странице Пользовательский размер изображения Woocommerce автоматизация плагинов wp_enqueue не будет работать над некоторыми файлами? Организация и группировка массива по годам Собирать все сообщения Custom Post Type в массив / объект соответствующим образом Как отображать миниатюру, если сообщение назначено иначе, иначе Настройка кнопки QuickTags HTML Editor для открытия диалогового окна для выбора параметров вставки страница сообщений – разная длина отрывка Default Nav Highlight Как я могу получить 3 разных типа типа таксономии в элементе div? Выполняется wp_schedule_event, но функция, связанная с крючком, не работает Одно меню для главной страницы (один пейджер) и другое меню для сообщений передача параметров для выполнения действия с короткого кода на wp_footer Ограничить get_pages, чтобы показывать только 5 элементов

Вызов AJAX возвращает 0

Несмотря на многие аналогичные должности, все предлагаемые решения не сработали для меня, так что мы здесь.

У меня есть следующий скрипт:

jQuery('#term').keyup(ajaxChange); function ajaxChange(){ var newFormChange = jQuery("#term").val(); alert (newFormChange); jQuery.ajax({ type:"POST", action: "my_test_action", url: "/wp-admin/admin-ajax.php", data: newFormChange, success:function(data){ console.log(data); } }); return false; } 

И PHP выглядит так:

 function my_test_action() { $var = "this is a test"; wp_send_json($var); die(); } add_action( 'wp_ajax_my_test_action', 'my_test_action' ); add_action( 'wp_ajax_nopriv_my_test_action', 'my_test_action' ); 

Я также пробовал: echo json_encode($var) или echo $var вместо wp_send_json() но функция всегда возвращает 0 в консоли браузера!

Мои другие вызовы AJAX работают, например, у меня есть еще один, который вызывает скрипт PHP, который вызывает запрос WP и отображает некоторые сообщения, он отлично работает.

EDIT: Вот как мой скрипт включен:

  function add_js() { if (is_page_template()) { wp_enqueue_script( 'mycustomscript', get_stylesheet_directory_uri().'/js/mycustomscript.js', array('jquery'), '1.0', true ); wp_localize_script('mycustomscript', 'ajaxurl', admin_url( 'admin-ajax.php' ) ); } } add_action('wp_enqueue_scripts', 'add_js'); 

Я думаю, проблема связана с переменной newFormChange , потому что jQuery(this).serialize(); не работало в первую очередь, потому что форма не отправляется, но изменяется только одно из ее полей. Поэтому я заменил его на var newFormChange = jQuery("#term").val(); но может url: "/wp-admin/admin-ajax.php" проблема с url: "/wp-admin/admin-ajax.php"

Где я ошибаюсь? благодаря

Solutions Collecting From Web of "Вызов AJAX возвращает 0"

Обратите внимание, что action должно быть внутри ключа data . В вашем почтовом запросе нет ключа, называемого как action поэтому функция обратного вызова никогда не вызывается.

Рассмотрим этот пример: –

 jQuery.ajax({ type:"POST", url: "/wp-admin/admin-ajax.php", data: { action: "my_test_action", form_data : newFormChange }, success: function (data) { console.log(data); } }); 

Также Примечание. Никогда не используйте относительный URL-адрес Ajax, например /wp-admin/admin-ajax.php . Вы можете использовать wp_localize_script() . См. Эти примеры

Кажется, есть проблема с url: "/wp-admin/admin-ajax.php" , вместо этого попробуйте добавить полный путь:

 function addajaxurl() { wp_localize_script( 'frontend-ajax', 'frontendajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ))); } add_action( 'wp_enqueue_scripts', 'addajaxurl' ); 

и вызовите переменную в вашей функции ajax:

  jQuery.ajax({ type:"POST", url: ajaxurl, data: newFormChange, success:function(data){ console.log(data); } }); 

проблема заключается в параметре действия. В своей функции javascript попробуйте:

 var newFormChange = jQuery("#term").val(); jQuery.ajax({ type: "POST", url: "/wp-admin/admin-ajax.php", data: { action: "my_test_action", newFormChange: newFormChange } , success: function(data) { console.log(data); alert(data); }); 

Вы также должны удалить die (); от вашей php-функции. Он уже находится в wp_send_json.