Функции API WordPress не работают при вызове функции AJAX functions.php

Я пытаюсь показать подкатегории категории в WordPress с помощью AJAX: когда я выбираю основную категорию, есть вызов WP Ajax, и результат используется при показе подкатегорий.

До сих пор у меня есть клиентский код, который работает, когда вы не вызываете функцию WP (этот код находится на странице темы):

jQuery('#cat-location-main').change(function () { var optionSelected = jQuery(this).find('option:selected'); var valueSelected = optionSelected.val(); var textSelected = optionSelected.text(); console.log(valueSelected); jQuery.ajax({ type: 'POST', url: ajaxurl, data: { action: 'myajax-get-subcat', category: valueSelected, // send the nonce along with the request categoryNonce: '<?php echo wp_create_nonce( 'myajax-get-subcat-nonce' );?>' }, success: function(data, textStatus, jjqXHR) { console.log(data); }, dataType: 'json' }); }); 

И у меня это в функции functions.php:

 add_action('wp_ajax_myajax-get-subcat', 'myajax_get_subcat'); function myajax_get_subcat() { $nonce = $_POST['categoryNonce']; $main_category = $_POST['category']; if (!wp_verify_nonce($nonce, 'myajax-get-subcat-nonce')) die ( 'Busted!'); if(function_exists('wp_dropdown_categories')==true) { echo 'true'; } else { echo 'false'; } wp_dropdown_categories('taxonomy=category&selected=1&echo=1&orderby=NAME&order=ASC&hide_empty=0&hide_empty=0&hierarchical=1&depth=1&id=cat-location-secondary&child_of='.$main_category); exit; } 

Теперь я получаю «правду» на стороне клиента при комментировании строки wp_dropdown_categories , и я абсолютно ничего не вижу, когда раскомментирую эту строку (сбой PHP). Ничего в журнале ошибок php (настройка WAMP).

Кроме того, не работает, даже если я добавляю require_once(__DIR__.'/../../../wp-load.php'); но он работает, если я использую GET в браузере (для функции.php). Любая помощь будет принята с благодарностью!

Solutions Collecting From Web of "Функции API WordPress не работают при вызове функции AJAX functions.php"

Вероятно, ваша проблема связана с тем, что вы не возвращаете объект json, а html (фактически смешанный текст и html), и вы устанавливаете jQuery для проверки того, что ответ json, а это не так.

ваш код в обработчике ajax должен быть чем-то вроде

 $catshtml = wp_dropdown_categories(.....echo=0); $ret = array('data' => $catshtml); wp_send_json($ret); die(); 

на стороне браузера вам нужно искать содержимое атрибута data элемента json, который вы получаете с сервера.

Отладочный совет: всегда смотрите на то, что фактически передано в ответ в разделе инструментов разработчика браузера, прежде чем начинать полагаться на журнал консоли.

Когда я, похоже, ничего не получаю от вызова Ajax, я запускаю Fiddler и проверяю возврат, когда дело доходит до запроса.

На днях вызов Аякса неизмеримо провалился. Изучив возвращение, я увидел, что другой программист сбрасывал массив на выход, прежде чем получил свой ответ. Я никогда бы не догадался об этом, потому что JavaScript никогда не попадал в точку останова, которую я установил.