2013-07-23 4 views
1

Я не могу понять, почему ничего не возвращается из моего вызова ajax (возвращает 0). То, что я пытаюсь сделать, - это когда пользователь заполняет свой ЛВС-идентификатор в форме, а информация его супервизора заполняет несколько полей. Любая помощь/предложения очень ценится. Вот мой код:WordPress - Ajax Request Keeps Returning 0

add_action ('wp_ajax_nopriv_get_ldapattr', 'get_ldap_attr');

JQuery (функция() {

jQuery('#empLanId').on('blur', function() { 

    var lanid = jQuery('#empLanId').val(), 
     data = { action: "get_ldap_attr", lanid: lanid }; 

     jQuery.ajax({ 
      url: ajaxurl, 
      dataType: 'json', 
      data: data, 
      success: function(response) { 
       console.log(response); 
      }, 
      error: function() { 
       console.log('error'); 
      } 

     }); 

}); 

});

функция get_ldap_attr ($ 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['directReports'], ','); 
      // find position of first comma in CN=Mxxxxxx,OU=Users,OU=MCR,DC=mfad,DC=mfroot,DC=org (directReports field) 
     $eq = stripos ($info['directReports'], '='); 
      // find position of first = 
     $s_lanid = substr ($info['directReports'], $eq+1, (($comm-1) - ($eq))); 
      //get substring between = and comma... for lanid happiness.. 
     $sup = getLDAP ($s_lanid, $ad, $dn, $usr, $pw); 
      // get supervisor's info... 
} 

//return $sup; 

echo json_encode($sup); die(); 
+0

Если Вы заканчиваете с 'фильеры (json_encode (массив ('тест' => 'значение')))' делает консоль показывает, что массив? Утверждение, что ваша переменная '$ sup' не является проблемой. – jterry

+0

Все еще возвращает 0. – Shapada

+0

Даже если вы _start_ 'get_ldap_attr()' с этим? – jterry

ответ

0

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

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

+0

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

+0

Это правда, но я указал на ядро ​​wordpress, у которого есть это условие :) – niklaz

2

Если переменная $sup действительна и заполнена после извлечения и анализа параметров вашего сайта, вам необходимо на самом деле echo из JSON - не вернуть его.

Пример в вашем коде:

return json_encode($sup); die(); 

..should следующим образом:

echo json_encode($sup); 
die(); 
+0

Спасибо за быстрый ответ. Я тоже пробовал это, но все равно не повезло. – Shapada

+0

Любые другие предложения? – Shapada

1

если вы пишете

add_action('wp_ajax_nopriv_**get_ldapattr**', '**get_ldap_attr**'); 

так что вы должны вызвать get_ldapattr и не get_ldap_att.

Другими словами, если вы укажете

add_action('wp_ajax_nopriv_**ACTION_HANDLER**', '**CALLBACK_FUNCTION**'); 

вы должны вызвать ACTION_HANDLER в вашей АЯКС сценария расслоение плотной (если ACTION_HANDLER не совпадает с CALLBACK_FUNCTION)

0

Вы пропустили раздел «заголовок». Ваш PHP скрипт должен заканчиваться так:

header('Content-Type: application/json'); // <<------ 
    echo json_encode($sup); 
    die(); 
Смежные вопросы