Stumped – Ajax Response Возвращает 0

Кажется, я не понимаю. Независимо от того, что я делаю, вызов ajax продолжает давать 0 ответ. Я тестировал свой PHP funtion, и он отлично работает, но всякий раз, когда я вызываю его через ajax, я ничего не получаю (только 0 ответов). Любая помощь / предложения очень ценится.

add_action('wp_ajax_get_ldapattr', 'get_ldap_attr'); add_action('wp_ajax_nopriv_get_ldapattr', 'get_ldap_attr'); function get_ldap_attr() { header("Content-type: application/json"); $lanid = $_POST['lanid']; $dn = get_site_option ( "ldapServerOU" ); $usr = get_site_option ( "ldapServerCN" ); $pw = get_site_option ( "ldapServerPass" ); $addr = get_site_option ( "ldapServerAddr" ); $ids = array(); $ad = ldap_connect ( $addr ) or die ( "Connection error." ); ldap_set_option ( $ad, LDAP_OPT_PROTOCOL_VERSION, 3 ); ldap_set_option ( $ad, LDAP_OPT_REFERRALS, 0 ); $bind = ldap_bind ( $ad, $usr, $pw ); if ( $bind ) { $SearchFor ="cn=".$lanid; $result = ldap_search ( $ad,$dn,$SearchFor ); $entry = ldap_first_entry ( $ad, $result ); if ( $entry != false ) { $info = ldap_get_attributes ( $ad, $entry ); } $comm = stripos ( $info['manager'][0], ',' ); // find position of first comma in CN=Mxxxxxx,OU=Users,OU=MCR,DC=mfad,DC=mfroot,DC=org (directReports field) $eq = stripos ( $info['manager'][0], '=' ); // find position of first = $s_lanid = substr ( $info['manager'][0], $eq+1, ( ( $comm-1 ) - ( $eq ) ) ); //get substring between = and comma... $sup = getLDAPInfo ( $s_lanid, $bind, $ad, $dn ); // get supervisor's info... } echo json_encode($sup); die(); } jQuery(document).ready(function() { jQuery('#empLanId').on('blur', function() { var lanid = jQuery('#empLanId').val(), data = { action: "get_ldapattr", lanid: lanid}; jQuery.ajax({ url: ajaxurl, data: data, dataType: 'json', type: 'post', success: function(response) { console.log(response); } }); }); }); 

Отлаживайте его логически.

Этот код работает. Я просто протестировал его. Это в теме (я поставил ее в header.php для тестирования):

 jQuery(document).ready(function() { var lanid = 'demo'; var ajaxurl = '<?php echo admin_url("admin-ajax.php", null); ?>'; data = { action: "get_ldapattr", lanid: lanid}; jQuery.ajax({ url: ajaxurl, data: data, dataType: 'json', type: 'post', success: function(response) { console.log(response); } }); }); 

И этот код в плагине:

 add_action('wp_ajax_get_ldapattr', 'get_ldap_attr'); add_action('wp_ajax_nopriv_get_ldapattr', 'get_ldap_attr'); function get_ldap_attr() { $sup = "data is ".$_POST['lanid']; echo json_encode($sup); die(); } 

Что происходит, когда я использую оба эти фрагмента кода, я получаю «данные демо» в консоли JS. Это то, чего вы ожидаете, в основном.

Итак, теперь вы должны определить, почему это не работает для вас. Я бы специально посмотрел, где находится PHP-код. Это в плагине? Это в файле functions.php темы? Вы уверены, что эта часть кода загружается вообще для ответов AJAX? Это не сработает, если у вас есть код в шаблоне страницы, например, потому что страницы шаблонов не загружаются при использовании обработчика ajax.

Следующее работает для меня в моей локальной установке WordPress. Обратите внимание, что я жестко закодировал URL AJAX, он будет отличаться в зависимости от вашей среды.

В functions.php :

 add_action('wp_ajax_get_ldapattr', 'get_ldap_attr'); add_action('wp_ajax_nopriv_get_ldapattr', 'get_ldap_attr'); function get_ldap_attr() { $lanid = $_POST['lanid']; echo json_encode($lanid); die(); } 

В самом шаблоне страницы (например, page.php ):

 <input id="empLanId" name="empLanId" value="foo" /> 

В файле JavaScript, включенном в шаблон страницы выше:

 jQuery('#empLanId').on('blur', function() { var ajaxurl = 'http://localhost/wordpress-vanilla-3.5.1/wp-admin/admin-ajax.php'; var lanid = jQuery('#empLanId').val(), data = { action: "get_ldapattr", lanid: lanid}; jQuery.ajax({ url: ajaxurl, data: data, dataType: 'json', type: 'post', success: function(response) { console.log(response); } }); }); 

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