Admin ajax request return 0 con die ()


10

Quindi sto usando questa configurazione per una chiamata AJAX nell'area amministrativa ( come questa ):

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

È solo un codice di prova, ma restituisce sempre 0 invece della stringa "funzionante". Inoltre trova l'URL Ajax correttamente, senza un errore 404.
Qual è il problema?


Hai mai capito questo problema? In tal caso, puoi commentare (o accettare) la risposta che ha risolto il tuo problema? Se nessuno di questi ha risolto il tuo problema ed è stato risolto , potresti aggiungere una risposta di seguito? Grazie!
jmort253,

@ jmort253 ciao, mi dispiace risponderti adesso, ma al momento ho ancora questo problema e non ho trovato alcuna soluzione sul web: '(ci sto lavorando quando ho del tempo libero; se trovo la soluzione , scriverò qui;)
Ivano Mercuri il

Ok, lo stesso qui. Se lo capissi, posterò. :) Rimaniamo in contatto.
jmort253,

1
Ho risolto il mio problema, il suffisso della parte wp_ajax_my_action"my_action" deve corrispondere all'azione utilizzata nel post jQuery. Vedo che il tuo corrisponde, quindi non è questo il problema nel tuo caso. Ho anche funzionante dalla pagina di amministrazione, che è quello che stai cercando di fare. Hai effettuato l'accesso quando provi a effettuare questa chiamata Ajax? O sei disconnesso?
jmort253,

Giusto. Non l'ho notato! ;)
Rutwick Gangurde il

Risposte:


21

Aggiungere anche questo: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Notare il nopriv.

Risolverà il tuo problema!


2
Ho risolto questo problema assicurandomi che il suffisso "wp_ajax_SUFFIX" corrispondesse all'azione, in modo che anche l'azione nel post jQuery fosse "SUFFIX". Tuttavia, non avevo bisogno di usare nopriv ... Non sono sicuro che questa sia la risposta al problema dell'operazione, poiché si tratta di un'azione che si sta verificando nella pagina di amministrazione, il che significa che sei loggato, il che ti suggerisce non è necessario registrare un gestore di nopriv ...
jmort253,

15

Ho avuto lo stesso problema. Soluzione:

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

Se non si aggiungono entrambi (con e senza nopriv) funzionerà solo in modalità di accesso o disconnessione. nopriv è per la disconnessione, l'altro è per la registrazione.


4

Non sono sicuro che questo sia il tuo problema, ma ho ricevuto una risposta di solo "0" e mi ci è voluto molto tempo per capirlo. Oltre a assicurarmi di mettere exito diealla fine della tua funzione php, ho scoperto che devi mettere il tuo add_action('wp_ajax_...bit al massimo livello del tuo plugin. L'ho fatto annidare nel mio admin_menuuncino, che non ha funzionato. Non sono sicuro che il codice sopra sia parte di un'inclusione all'interno di una funzione del tuo file php di plugin di livello superiore (come il mio).


1
Lo stesso problema qui. Non so come risolvere questo tipo di problema, poiché a volte abbiamo bisogno di inserire la risposta ajax all'interno o alla fine dei codici.
Ari,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.