it-swarm.com.de

Admin Ajax Request Return mit die ()

Ich verwende diese Konfiguration also für einen AJAX -Aufruf im Administrationsbereich ( wie folgt ):

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

Es ist nur ein Testcode, aber es gibt immer 0 anstelle der Zeichenfolge "attivato" zurück. Es findet auch die Ajax-URL korrekt, ohne einen 404-Fehler.
Worin besteht das Problem?

10
Ivano Mercuri

Fügen Sie dies ebenfalls hinzu: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Beachten Sie die nopriv.

Es wird Ihr Problem lösen!

21

Ich hatte das gleiche problem Lösung:

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

Wenn Sie nicht beide hinzufügen (mit und ohne nopriv), funktioniert dies entweder im angemeldeten Modus oder nur im abgemeldeten Modus. nopriv ist für abgemeldet, der andere ist für angemeldet.

15
Paul

Ich bin mir nicht sicher, ob dies Ihr Problem ist, aber ich habe eine Antwort von nur "0" erhalten und es hat am längsten gedauert, bis ich es herausgefunden habe. Abgesehen davon, dass Sie exit oder die am Ende Ihrer PHP-Funktion einfügen, habe ich festgestellt, dass Sie Ihr add_action('wp_ajax_...-Bit in der obersten Ebene Ihres Plugins einfügen müssen. Ich hatte es in meinem admin_menu-Hook verschachtelt, was nicht funktionierte. Ich bin mir nicht sicher, ob der obige Code Teil eines Include innerhalb einer Funktion aus Ihrer Top-Level-Plugin-PHP-Datei ist (wie meiner war).

4
Jeff