web-dev-qa-db-fra.com

Stumped - Retours de réponse Ajax

Je n'arrive pas à comprendre. Quoi que je fasse, l'appel ajax continue de donner une réponse nulle. J'ai testé ma fonction PHP et elle fonctionne correctement, mais chaque fois que je l'appelle via ajax, je ne reçois rien (réponse 0 uniquement). Toute aide/suggestion est très appréciée.

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);  
            }
        });

    });
});
1
shapada

Déboguer logiquement.

Ce code fonctionne. Je viens de le tester. Ceci dans un thème (je le mets dans header.php pour le tester):

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);  
        }
    });
});

Et ce code dans un plugin:

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

Ce qui se passe lorsque j'utilise ces deux éléments de code, c'est que j'obtiens "data is demo" dans la console JS. Quel est ce que vous attendez, fondamentalement.

Alors maintenant, vous devez déterminer pourquoi cela ne fonctionne pas pour vous. Je voudrais spécifiquement regarder où vous avez le code PHP situé. Est-ce dans un plugin? Est-ce dans le fichier functions.php du thème? Êtes-vous sûr que cette partie du code est chargée pour les réponses AJAX? Cela ne fonctionnera pas si vous avez le code dans un modèle de page, par exemple, car les modèles de page ne se chargent pas lors de l'utilisation du gestionnaire ajax.

3
Otto

Ce qui suit fonctionne pour moi sur mon installation WordPress locale. Notez que j'ai codé en dur l'URL AJAX, ce sera différent selon votre environnement.

Dans le functions.php du thème:

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

Dans le modèle de page lui-même (par exemple page.php):

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

Dans le fichier JavaScript inclus dans le modèle de page ci-dessus:

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);
        }
    });
});

Notez que j'ai supprimé toute logique n'ayant rien à voir avec WordPress, afin d'essayer d'isoler le problème. Ma conclusion est que votre code lié à WordPress devrait bien se passer.

0
montrealist