我似乎无法弄清楚为什么从我的ajax调用返回任何内容(返回0)。我想要做的是当用户在表单上填写他们的LAN ID时,他们的主管的信息会自动填充几个字段。非常感谢任何帮助/建议。这是我的代码:
add_action('wp_ajax_nopriv_get_ldapattr','get_ldap_attr');
jQuery(function(){
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');
}
});
});
});
function 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 :(得分:2)
如果您的$sup
变量有效并在您的网站选项检索和解析后填充,则需要echo
实际JSON
- 不要将其返回。
代码中的示例:
return json_encode($sup); die();
..应该读:
echo json_encode($sup);
die();
答案 1 :(得分: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**');
您必须在ajax js脚本中调用ACTION_HANDLER
(除非ACTION_HANDLER
与CALLBACK_FUNCTION
重合)
答案 2 :(得分:0)
那是因为它返回条件的结果,检查用户是否以管理员身份登录。 0是假的。
更新: 尝试而不是返回函数的结尾,以放置回显或打印结果。我认为你结束了功能程序,但是来自wp的其他进程一直处于静止状态。
答案 3 :(得分:0)
你错过了"标题"部分。 你的PHP脚本应该像这样结束:
header( 'Content-Type: application/json' ); // <<------
echo json_encode($sup);
die();