管理AJAX请求返回0,且DIE()

时间:2012-03-15 作者:Ivano Mercuri

因此,我将此配置用于管理区域中的AJAX调用(like this):

add_action( \'admin_head\', \'ajaxPerNgg\' );

function ajaxPerNgg(){ ?>
<script type="text/javascript" >
jQuery(document).ready(function() {
    jQuery("#message").remove();
    jQuery("#errore a#attivo").click(
        function(){
            var data = {
                action: \'my_action\'
            };
            jQuery.post(ajaxurl, data, function(response) {
                if(response == "attivato")
                    jQuery("#errore a#inattivo").attr("id","completato").html("Attivato");
                else
                    jQuery("#errore a#inattivo").attr("id","attivo").html("Attivalo ora");
            });
        }
    );
});
</script>
<?php }

add_action(\'wp_ajax_my_action\', \'my_action_callback\');

function my_action_callback() {
    echo \'attivato\';
    die();
}
这只是一个测试代码,但它总是返回0,而不是字符串“attivato”。它还可以正确地找到ajax url,没有404错误
问题是什么?

3 个回复
SO网友:Rutwick Gangurde

还要添加以下内容:add_action(\'wp_ajax_nopriv_my_action\', \'my_action_callback\');. 请注意nopriv.

它会解决你的问题!

SO网友:Paul

我也有同样的问题。解决方案:

add_action(\'wp_ajax_nopriv_my_action\', \'my_action_callback\');
add_action(\'wp_ajax_my_action\', \'my_action_callback\');
如果不同时添加(有无nopriv),它将仅在登录模式或注销模式下工作。nopriv用于注销,另一个用于登录。

SO网友:Jeff

我不确定这是否是你的问题,但我得到的回复只有“0”,我花了最长的时间才弄清楚。除了确保你exitdie 在php函数结束时,我发现您必须add_action(\'wp_ajax_... 位位于插件的顶层。我把它嵌套在我的admin_menu 胡克,这不管用。我不确定上面的代码是否是顶级插件php文件中函数的包含部分(就像我的一样)。

结束