demande ajax admin retour 0 avec 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 renvoie toujours 0 au lieu de la chaîne "attivato". Il trouve également l’URL ajax correctement, sans erreur 404.
Quel est le problème?

    
posée Ivano Mercuri 15.03.2012 - 17:40

3 réponses

21

Ajoutez également ceci: add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); . Notez le nopriv .

Cela résoudra votre problème!

    
réponse donnée Rutwick Gangurde 22.06.2012 - 08:00
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 destiné à la déconnexion, l'autre à la connexion.

    
réponse donnée Paul 31.07.2012 - 10:40
4

Je ne suis pas sûr que ce soit votre problème, mais je recevais une réponse de "0" et il m'a fallu le plus longtemps pour le comprendre. En plus de vous assurer de mettre exit ou die à la fin de votre fonction php, j'ai découvert qu'il fallait mettre votre bit add_action('wp_ajax_... au niveau supérieur de votre plugin. Je l'avais imbriqué dans mon admin_menu hook, ce qui ne fonctionnait pas. Je ne sais pas si votre code ci-dessus fait partie d'une inclusion dans une fonction de votre fichier php de plugin de niveau supérieur (comme le mien l'était).

    
réponse donnée Jeff 22.03.2012 - 22:20

Lire d'autres questions sur les étiquettes