Admin ajax request return 0 com die ()

10

Então, estou usando essa configuração para uma chamada AJAX na área administrativa ( assim ):

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

É apenas um código de teste, mas sempre retorna 0 em vez da string "attivato". Ele também encontra o ajax url corretamente, sem um erro 404.
Qual é o problema?

    
por Ivano Mercuri 15.03.2012 / 17:40

3 respostas

21

Adicione também: add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); . Observe o nopriv .

Isso resolverá seu problema!

    
por Rutwick Gangurde 22.06.2012 / 08:00
15

Eu tive o mesmo problema. Solução:

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

Se você não adicionar ambos (com e sem nopriv), ele funcionará no modo conectado ou no modo desconectado. nopriv é para sair, o outro é para entrar.

    
por Paul 31.07.2012 / 10:40
4

Não tenho certeza se esse é o seu problema, mas recebi uma resposta de apenas "0" e demorei mais tempo para descobrir. Além de ter certeza que você colocou exit ou die no final da sua função php, descobri que você tem que colocar seu add_action('wp_ajax_... bit no nível superior do seu plugin. Eu aninhava dentro do meu admin_menu hook, o que não funcionava. Não tenho certeza se seu código acima é parte de uma inclusão dentro de uma função do seu arquivo php de nível superior (como o meu era).

    
por Jeff 22.03.2012 / 22:20

Tags