La richiesta admin ajax con die() restituisce 0

15 mar 2012, 18:40:41
Visualizzazioni: 21.4K
Voti: 10

Sto utilizzando questa configurazione per una chiamata AJAX nell'area amministrativa (come questo):

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 test, ma restituisce sempre 0 invece della stringa "attivato". Trova correttamente l'URL ajax, senza errore 404.
Qual è il problema?

5
Commenti

Hai risolto questo problema? Se sì, potresti per favore commentare (o accettare) la risposta che ha risolto il tuo problema? Se nessuna di queste ha risolto il tuo problema ma è stato risolto, potresti aggiungere una risposta qui sotto? Grazie!

jmort253 jmort253
6 lug 2012 02:51:56

@jmort253 ciao, scusa per risponderti solo ora, ma al momento ho ancora questo problema e non ho trovato soluzioni in giro per il web :'( ci sto lavorando quando ho un po' di tempo libero; se trovo la soluzione, la scriverò qui ;)

Ivano Mercuri Ivano Mercuri
6 lug 2012 09:56:18

Ok, stessa situazione qui. Se trovo una soluzione, la posterò. :) Teniamoci in contatto.

jmort253 jmort253
6 lug 2012 10:27:43

Ho risolto il mio problema, il suffisso di wp_ajax_my_action, la parte "my_action", deve corrispondere all'azione usata nel post jQuery. Vedo che il tuo corrisponde, quindi non è quello il problema nel tuo caso. Funziona anche dalla pagina di amministrazione, che è quello che stai cercando di fare. Sei loggato quando provi a fare questa chiamata ajax? Oppure sei disconnesso?

jmort253 jmort253
6 lug 2012 19:13:41

Giusto. Non l'avevo notato! ;)

Rutwick Gangurde Rutwick Gangurde
7 lug 2012 07:44:25
Tutte le risposte alla domanda 3
1
21

Aggiungi anche questo: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Nota il nopriv.

Risolverà il tuo problema!

22 giu 2012 09:00:15
Commenti

Ho risolto assicurandomi che il suffisso di "wp_ajax_SUFFIX" corrispondesse all'azione, in modo che l'azione nel post jQuery fosse anch'essa "SUFFIX". Tuttavia, non ho avuto bisogno di usare nopriv... Non sono sicuro che questa sia la soluzione al problema dell'op, dato che si tratta di un'azione che avviene nella pagina di amministrazione, il che significa praticamente che sei loggato, suggerendo che non hai bisogno di registrare un gestore nopriv...

jmort253 jmort253
6 lug 2012 19:15:57
0
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 aggiungi entrambi (con e senza nopriv) funzionerà solo in modalità con accesso effettuato o solo in modalità senza accesso. nopriv è per gli utenti non autenticati, l'altro è per gli utenti autenticati.

31 lug 2012 11:40:03
1

Non sono sicuro che questo sia il tuo problema, ma io ricevevo solo una risposta "0" e ci ho messo tantissimo tempo a capire il motivo. Oltre ad assicurarti di mettere exit o die alla fine della tua funzione PHP, ho scoperto che devi posizionare il tuo add_action('wp_ajax_... al livello principale del tuo plugin. Io l'avevo annidato all'interno del mio hook admin_menu, cosa che non funzionava. Non so se il tuo codice sopra fa parte di un include all'interno di una funzione dal tuo file PHP principale del plugin (come era nel mio caso).

22 mar 2012 23:20:20
Commenti

Lo stesso problema qui.. Non sono sicuro di come risolvere questo tipo di problema, dato che a volte abbiamo bisogno di inserire la risposta ajax all'interno o alla fine dei codici.

Ari Ari
16 dic 2013 09:52:38