Admin Ajax Request gibt 0 mit die () zurück

10

Ich verwende diese Konfiguration also für einen AJAX-Aufruf im Verwaltungsbereich ( 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 er gibt immer 0 anstelle der Zeichenfolge "attivato" zurück. Es findet auch die Ajax-URL korrekt, ohne einen 404-Fehler.
Worin besteht das Problem?

Ivano Mercuri
quelle
Haben Sie jemals dieses Problem herausgefunden? Wenn ja, können Sie bitte die Antwort kommentieren (oder akzeptieren), die Ihr Problem gelöst hat? Wenn keines dieser Probleme Ihr Problem gelöst hat und es gelöst ist , können Sie bitte unten eine Antwort hinzufügen? Vielen Dank!
jmort253
@ jmort253 hi, tut mir leid, dass ich dir jetzt antworte, aber im Moment habe ich immer noch dieses Problem und ich habe keine Lösung im Web gefunden: '(Ich arbeite daran, wenn ich etwas Freizeit habe; wenn ich die Lösung finde , ich werde hier schreiben;)
Ivano Mercuri
OK das gleiche hier. Wenn ich es herausfinde, werde ich posten. :) Den Kontakt halten.
jmort253
1
Ich habe mein Problem gelöst. Das Suffix des wp_ajax_my_actionTeils "my_action" muss mit der im jQuery-Beitrag verwendeten Aktion übereinstimmen. Ich sehe, dass deine übereinstimmen, also ist das in deinem Fall nicht das Problem. Ich habe es auch auf der Admin-Seite, was Sie versuchen zu tun. Sind Sie angemeldet, wenn Sie versuchen, diesen Ajax-Anruf zu tätigen? Oder bist du abgemeldet?
jmort253
Richtig. Hab das nicht bemerkt! ;)
Rutwick Gangurde

Antworten:

21

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!

Rutwick Gangurde
quelle
2
Ich habe dies behoben, indem ich sichergestellt habe, dass das Suffix von "wp_ajax_SUFFIX" mit der Aktion übereinstimmt, sodass die Aktion im jQuery-Beitrag auch "SUFFIX" war. Ich musste jedoch kein nopriv verwenden ... Ich bin mir nicht sicher, ob dies die Antwort auf das Problem der Operation ist, da dies eine Aktion ist, die auf der Administrationsseite ausgeführt wird. Dies bedeutet so ziemlich, dass Sie angemeldet sind, was darauf hindeutet Sie müssen keinen NOPRIV-Handler registrieren ...
jmort253
15

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 Anmeldemodus oder nur im Abmeldemodus. nopriv ist für abgemeldet, der andere ist für abgemeldet.

Paul
quelle
4

Ich bin mir nicht sicher, ob dies Ihr Problem ist, aber ich erhielt eine Antwort von nur "0" und es dauerte am längsten, bis ich es herausgefunden hatte. Abgesehen davon, dass Sie sicherstellen, dass Sie exitoder dieam Ende Ihrer PHP-Funktion stehen, habe ich herausgefunden, dass Sie Ihr add_action('wp_ajax_...Bit auf der obersten Ebene Ihres Plugins platzieren müssen. Ich hatte es in meinem admin_menuHaken verschachtelt , was nicht funktionierte. Ich bin mir nicht sicher, ob Ihr Code oben Teil eines Includes in einer Funktion aus Ihrer Top-Level-Plugin-PHP-Datei ist (wie meine).

Jeff
quelle
1
Das gleiche Problem hier. Ich bin mir nicht sicher, wie ich diese Art von Problem beheben soll, da wir manchmal die Ajax-Antwort in oder am Ende von Codes einfügen müssen.
Ari