La solicitud de admin-ajax devuelve 0 con die()

15 mar 2012, 18:40:41
Vistas: 21.4K
Votos: 10

Entonces estoy usando esta configuración para una llamada AJAX en el área administrativa (como esta):

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) {
                // Si la respuesta es "activado"
                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 }

// Agregar acción para el callback de ajax
add_action('wp_ajax_my_action', 'my_action_callback');

function my_action_callback() {
    echo 'attivato';
    die();
}

Es solo un código de prueba, pero siempre devuelve 0 en lugar de la cadena "attivato". También encuentra la url de ajax correctamente, sin un error 404.
¿Cuál es el problema?

5
Comentarios

¿Lograste resolver este problema? Si es así, ¿puedes comentar (o aceptar) la respuesta que solucionó tu problema? Si ninguna de estas solucionó tu problema pero está resuelto, ¿podrías agregar una respuesta más abajo? ¡Gracias!

jmort253 jmort253
6 jul 2012 02:51:56

@jmort253 hola, disculpa responderte ahora mismo, pero por el momento, todavía tengo este problema y no he encontrado solución en la web :'( Estoy trabajando en ello cuando tengo tiempo libre; si encuentro la solución, la escribiré aquí ;)

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

Ok, aquí igual. Si lo resuelvo, lo publicaré. :) Mantengámonos en contacto.

jmort253 jmort253
6 jul 2012 10:27:43

Resolví mi problema, el sufijo del wp_ajax_my_action, la parte de "my_action", debe coincidir con la acción utilizada en el post de jQuery. Veo que el tuyo coincide, así que ese no es el problema en tu caso. También lo tengo funcionando desde la página de administración, que es lo que estás intentando hacer. ¿Estás conectado cuando intentas hacer esta llamada ajax? ¿O estás desconectado?

jmort253 jmort253
6 jul 2012 19:13:41

Correcto. ¡No me di cuenta de eso! ;)

Rutwick Gangurde Rutwick Gangurde
7 jul 2012 07:44:25
Todas las respuestas a la pregunta 3
1
21

Agrega esto también: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Observa el nopriv.

¡Esto resolverá tu problema!

22 jun 2012 09:00:15
Comentarios

Solucioné esto asegurándome de que el sufijo de "wp_ajax_SUFFIX" coincidiera con la acción, de modo que la acción en el post de jQuery también fuera "SUFFIX". Sin embargo, no necesité usar nopriv... No estoy seguro si esta es la solución al problema del OP, ya que esta es una acción que ocurre en la página de administración, lo que básicamente significa que estás conectado, lo que sugiere que no necesitas registrar un manejador nopriv...

jmort253 jmort253
6 jul 2012 19:15:57
0
15

Tenía el mismo problema. Solución:

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

Si no agregas ambos (con y sin nopriv) solo funcionará en modo conectado o modo desconectado. nopriv es para usuarios desconectados, el otro es para usuarios conectados.

31 jul 2012 11:40:03
1

No estoy seguro si este es tu problema, pero yo estaba recibiendo una respuesta de solo "0" y me tomó mucho tiempo descubrir la causa. Además de asegurarte de poner exit o die al final de tu función PHP, descubrí que tienes que colocar tu add_action('wp_ajax_... en el nivel superior de tu plugin. Yo lo tenía anidado dentro de mi hook admin_menu, lo cual no funcionaba. No estoy seguro si tu código anterior es parte de un include dentro de una función desde tu archivo PHP principal del plugin (como era mi caso).

22 mar 2012 23:20:20
Comentarios

El mismo problema aquí... No estoy seguro de cómo solucionar este tipo de problema, ya que a veces necesitamos colocar la respuesta ajax dentro o al final de los códigos.

Ari Ari
16 dic 2013 09:52:38