Admin ajax request return 0 with die ()

10

J'utilise donc cette configuration pour un appel AJAX dans la zone administrative ( comme ceci ):

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

C'est juste un code de test, mais il retourne toujours 0 au lieu de la chaîne "attivato". Il trouve également l'url ajax correctement, sans erreur 404.
Quel est le problème?

Ivano Mercuri
la source
Avez-vous déjà résolu ce problème? Si oui, pouvez-vous commenter (ou accepter) la réponse qui a résolu votre problème? Si aucun de ces problèmes n'a résolu votre problème et qu'il est résolu , pourriez-vous ajouter une réponse ci-dessous? Je vous remercie!
jmort253
@ jmort253 salut, désolé de vous répondre maintenant, mais pour le moment, j'ai toujours ce problème et je n'ai trouvé aucune solution sur le Web: '(j'y travaille quand j'ai du temps libre; si je trouve la solution , j'écrirai ici;)
Ivano Mercuri
OK même ici. Si je le découvre, je posterai. :) Rester en contact.
jmort253
1
J'ai résolu mon problème, le suffixe de la wp_ajax_my_actionpartie "my_action" doit correspondre à l'action utilisée dans le post jQuery. Je vois que le vôtre correspond, donc ce n'est pas le problème dans votre cas. Je le fais également fonctionner depuis la page d'administration, ce que vous essayez de faire. Êtes-vous connecté lorsque vous essayez de passer cet appel ajax? Ou êtes-vous déconnecté?
jmort253
Droite. Je n'ai pas remarqué ça! ;)
Rutwick Gangurde

Réponses:

21

Ajouter cela aussi: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Remarquez le nopriv.

Cela résoudra votre problème!

Rutwick Gangurde
la source
2
J'ai corrigé cela en m'assurant que le suffixe de "wp_ajax_SUFFIX" correspond à l'action, de sorte que l'action dans le post jQuery était également "SUFFIX". Cependant, je n'avais pas besoin d'utiliser nopriv ... Je ne sais pas si c'est la réponse au problème de l'op, car il s'agit d'une action qui se produit sur la page d'administration, ce qui signifie à peu près que vous êtes connecté, ce qui vous suggère pas besoin d'enregistrer un gestionnaire nopriv ...
jmort253
15

J'ai eu le même problème. Solution:

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

Si vous n'ajoutez pas les deux (avec et sans nopriv), cela fonctionnera en mode connecté ou déconnecté uniquement. nopriv est pour déconnecté, l'autre pour connecté.

Paul
la source
4

Je ne sais pas si c'est votre problème, mais j'obtenais une réponse de "0" et cela m'a pris le plus de temps pour le comprendre. En plus de vous assurer que vous mettez exitou dieà la fin de votre fonction php, j'ai découvert que vous devez mettre votre add_action('wp_ajax_...bit au niveau supérieur de votre plugin. Je l'avais emboîté dans mon admin_menucrochet, ce qui n'a pas fonctionné. Je ne sais pas si votre code ci-dessus fait partie d'une inclusion à l'intérieur d'une fonction de votre fichier php de plugin de niveau supérieur (comme le mien l'était).

Jeff
la source
1
Le même problème ici .. Je ne sais pas comment résoudre ce genre de problème, car nous devons parfois mettre la réponse ajax à l'intérieur ou à la fin des codes.
Ari