web-dev-qa-db-ja.com

Stumped - Ajaxのレスポンスが返される

理解できないようです。私が何をしても、ajax呼び出しは0の応答を返し続けます。私は私のPHP機能をテストしました、そしてそれはうまく働きますが、私が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);  
            }
        });

    });
});
1
shapada

論理的にデバッグしてください。

このコードは機能します。私はちょうどそれをテストしました。これはテーマです(私はテストのために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コンソールに "data is demo"と表示されます。これは基本的にあなたが期待することです。

だから今、あなたはこれがあなたのためにうまくいかない理由を判断する必要があります。 PHPコードがどこにあるのかを詳しく見ていきます。プラグインですか?テーマのfunctions.phpファイルにありますか?コードのその部分がAJAX応答用にまったくロードされていることを確認していますか?たとえば、ページテンプレートにコードがある場合は機能しません。これは、ajaxハンドラを使用しているときにページテンプレートが読み込まれないためです。

3
Otto

以下は私のために私のローカルWordPressインストールで動作します。 AJAXというURLをハードコードしましたが、環境によって異なります。

テーマの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関連のコードは問題ないはずだということです。

0
montrealist