1

我似乎无法弄清楚为什么我的 ajax 调用没有返回任何内容(返回 0)。我想要做的是,当用户在表单上填写他们的 LAN ID 时,他们的主管信息会自动填充几个字段。非常感谢任何帮助/建议。这是我的代码:

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();
4

4 回答 4

2

如果您的$sup变量在您的站点选项检索和解析后有效且已填充,则您需要实际echo输出JSON- 而不是返回它。

您的代码中的示例:

return json_encode($sup); die();

..应该读:

echo json_encode($sup);
die();
于 2013-07-23T15:33:32.977 回答
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您的 ajax js 脚本(除非ACTION_HANDLER与 相吻合CALLBACK_FUNCTION

于 2014-10-28T10:18:51.423 回答
0

那是因为它从检查用户是否以管理员身份登录的条件返回结果。0 为假。

更新:尝试而不是在函数结束时返回,以放置回显或打印结果。我认为你结束了函数过程,但 wp 的其他进程保持静止。

于 2013-07-23T15:31:12.170 回答
0

您缺少“标题”部分。你的 PHP 脚本应该这样结束:

    header( 'Content-Type: application/json' ); // <<------
    echo json_encode($sup);
    die();
于 2015-07-13T13:08:51.820 回答