Stumping-AJAX响应返回0

时间:2013-07-24 作者:shapada

我似乎想不出来。无论我做什么,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);  
            }
        });

    });
});

2 个回复
SO网友:Otto

逻辑调试它。

此代码有效。我只是测试了一下。这是一个主题(我把它放在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控制台中得到“数据即演示”。基本上,这就是你所期望的。

所以现在,你必须确定为什么这对你不起作用。我将特别关注PHP代码的位置。它在插件中吗?这是在主题的功能。php文件?您确定为AJAX响应加载了这部分代码吗?例如,如果您将代码放在页面模板中,这将不起作用,因为使用ajax处理程序时不会加载页面模板。

SO网友:montrealist

以下内容适用于我的本地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相关代码应该可以。

结束

相关推荐

重力将jQuery.Load形式化为模式

我有一个gravity表单联系人表单,它驻留在一个页面上,但我想要的是一个站点范围的链接,它将打开该表单,并以动态模式显示它。一种方法是将表单插入模板端的标记中,这样表单就已经存在于每个页面上了。但这意味着加载了大量的标记和gf脚本,而这些脚本在很大程度上都不需要存在。因此,我收集了一些js,从页面中获取表单标记并将其插入DOM,加载脚本,然后在twitter引导模式中显示结果。事物的表示端按预期工作,但js条件逻辑等都没有得到应用。我知道js正在加载,因为Im将每个脚本的状态输入控制台。日志-我得到“2