Solicitação de administrador ajax retornar 0 com die ()

10

Então, eu 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 URL do ajax corretamente, sem um erro 404.
Qual é o problema?

Ivano Mercuri
fonte
Você já descobriu esse problema? Em caso afirmativo, você pode comentar (ou aceitar) a resposta que resolveu seu problema? Se nada disso resolveu o seu problema e ele foi resolvido , você poderia adicionar uma resposta abaixo? Obrigado!
precisa saber é o seguinte
@ jmort253 oi, desculpe-me por responder agora, mas, no momento, ainda tenho esse problema e não encontrei nenhuma solução na web: '(estou trabalhando nisso quando tenho tempo livre; se encontrar a solução , eu vou escrever aqui;)
Ivano Mercuri
OK, o mesmo aqui. Se eu descobrir, vou postar. :) Mantenha contato.
jmort253
11
wp_ajax_my_actionResolvi meu problema, o sufixo da parte "my_action" deve corresponder à ação usada no post do jQuery. Vejo que o seu corresponde, então esse não é o problema no seu caso. Também o tenho trabalhando na página de administração, que é o que você está tentando fazer. Você está conectado ao tentar fazer esta chamada ajax? Ou você está desconectado?
jmort253
Direita. Não percebeu isso! ;)
Rutwick Gangurde

Respostas:

21

Adicione esta assim: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Observe o nopriv.

Isso resolverá o seu problema!

Rutwick Gangurde
fonte
2
Corrigi isso, certificando-se de que o sufixo "wp_ajax_SUFFIX" corresponda à ação, para que a ação na postagem do jQuery também fosse "SUFFIX". No entanto, não precisei usar o nopriv ... Não tenho certeza se essa é a resposta para o problema da operação, pois essa é uma ação que está ocorrendo na página de administrador, o que significa que você está logado, o que sugere que você está logado. não é necessário registrar um manipulador nopriv ...
jmort253
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á apenas no modo conectado ou no modo desconectado. nopriv está desconectado, o outro está conectado.

Paulo
fonte
4

Não tenho certeza se esse é o seu problema, mas eu estava recebendo uma resposta de apenas "0" e demorei mais tempo para descobrir isso. Além de garantir que você coloque exitou dieno final da sua função php, descobri que você precisa colocar sua add_action('wp_ajax_...parte no nível superior do seu plugin. Eu o aninhei dentro do meu admin_menugancho, o que não funcionou. Não tenho certeza se o seu código acima faz parte de uma inclusão dentro de uma função do seu arquivo php do plugin de nível superior (como o meu).

Jeff
fonte
11
O mesmo problema aqui. Não temos certeza de como corrigir esse tipo de problema, pois às vezes precisamos colocar a resposta do ajax dentro ou no final dos códigos.
Ari #