La solicitud de administrador ajax devuelve 0 con die ()


10

Así que 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) {
                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 solo un código de prueba, pero siempre devuelve 0 en lugar de la cadena "attivato". También encuentra la url ajax correctamente, sin un error 404.
¿Cuál es el problema?


¿Alguna vez resolviste este problema? Si es así, ¿puede comentar (o aceptar) la respuesta que resolvió su problema? Si ninguno de estos resuelve su problema y se resuelve , ¿podría agregar una respuesta a continuación? ¡Gracias!
jmort253

@ jmort253 hola, lamento responderte ahora, pero por el momento, todavía tengo este problema y no encontré ninguna solución en la web: '(Estoy trabajando en ello cuando tengo algo de tiempo libre; si encuentro la solución , escribiré aquí;)
Ivano Mercuri

Esta bien, igual aquí. Si lo descubro, lo publicaré. :) Mantenerse en contacto.
jmort253

1
wp_ajax_my_actionResolví mi problema, el sufijo de la parte "my_action" debe coincidir con la acción utilizada en la publicación 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 tratando de hacer. ¿Estás conectado cuando intentas hacer esta llamada ajax? ¿O estás desconectado?
jmort253

Derecha. ¡No me di cuenta de eso! ;)
Rutwick Gangurde

Respuestas:


21

Añadir esta así: add_action('wp_ajax_nopriv_my_action', 'my_action_callback');. Note el nopriv.

¡Resolverá tu problema!


2
Lo arreglé asegurándome de que el sufijo "wp_ajax_SUFFIX" coincida con la acción, de modo que la acción en la publicación de jQuery también sea "SUFFIX". Sin embargo, no necesitaba usar nopriv ... No estoy seguro de si esta es la respuesta al problema del operador, ya que esta es una acción que está ocurriendo en la página de administración, lo que significa que estás conectado, lo que te sugiere no es necesario registrar un controlador nopriv ...
jmort253

15

Yo tuve 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 agrega ambos (con y sin nopriv), funcionará en el modo de inicio de sesión o solo en el modo cerrado. nopriv es para cerrar sesión, el otro es para iniciar sesión.


4

No estoy seguro si este es su problema, pero recibí una respuesta de solo "0" y me tomó más tiempo resolverlo. Además de asegurarte de poner exito dieal final de tu función php, descubrí que tienes que poner tu add_action('wp_ajax_...bit en el nivel superior de tu complemento. Lo tenía anidado dentro de mi admin_menuanzuelo, que no funcionó. No estoy seguro de si su código anterior es parte de una inclusión dentro de una función de su archivo php del complemento de nivel superior (como lo fue el mío).


1
El mismo problema aquí ... No estoy seguro de cómo solucionar este tipo de problema, ya que a veces necesitamos poner la respuesta ajax dentro o al final de los códigos.
Ari
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.