Admin Ajax está devolviendo 0

28

Soy relativamente nuevo en jQuery y AJAX en particular. Tengo un pequeño problema con el valor de retorno siempre siendo 0, aunque creo que este es realmente el mensaje de éxito y no devuelve nada.

He buscado en Google-verse y tengo la función die () en la devolución de llamada de PHP y creo que las add_actions son correctas.

Estoy trabajando en un host local, aunque dudo que eso lo afecte y todo esto está en el administrador, no en el front-end. También verifiqué que el js está en cola y localizado.

Recibo un mensaje de 200 OK en el área de desarrollador de Chrome.

También probé el AJAX básico de http://codex.wordpress.org/AJAX_in_Plugins y también devolvió 0, lo que me hace preguntarme si es algo más que el código que se describe a continuación.

En este momento solo estoy tratando de hacer que envíe algo a jQuery. Cualquier ayuda sería apreciada.

El jQuery

jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {

            var currentid = jQuery(this).attr('id');

            //alert(currentid);
            console.log(currentid);

            jQuery.ajax ( data = {
                action: 'cleanlinks_ajax_get_post_data',
                url: ajaxurl,
                type: 'POST',
                dataType: 'text',
                "currentid" : currentid

            });

            jQuery.post(ajaxurl, data, function(response) {

                var dataz = response;
                alert( dataz );
                console.log (dataz); //show json in console


            });

            return false;

    }); //end click event
}); //end doc ready

El PHP

add_action("wp_ajax_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
add_action("wp_ajax_nopriv_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");

function cleanlinks_ajax_get_post_data() {

$from_ajax =  $_POST['currentid'];

echo "do" . $from_ajax . "something";

die();


}
Apina
fuente
1
¿Has verificado que ajaxurl está configurado correctamente?
Andrew Bartel
¿La consola de tu navegador muestra algún error? Si es así, ¿Que son?
s_ha_dum
2
jQuery('.cl_link_buttons').val('id').click(function()se ve raro.
fuxia
Andrew, sí, creo que es correcto, la url de solicitud en Chrome Inspector muestra domain / wp-admin / admin-ajax.php
Apina
@s_ha_dum No se muestran errores
Apina

Respuestas:

40

Una 0respuesta significa que la acción no está establecida (en los datos de ajax) o que no se puede encontrar la función de devolución de llamada de la acción.

helgatheviking
fuente
2
Sí, esta es la respuesta correcta. Todo lo que agrega die () al final lo hace, es terminar el script. Esa respuesta es técnicamente correcta si está viendo 0 agregado al FIN de la salida, sin embargo, si todo lo que obtiene es '0', significa que no se devolvió nada y tiene un error como se describe en esta respuesta.
Hybrid Web Dev
O simplemente no devolvió nada a propósito en el php que maneja la solicitud ajax. Asegúrese de hacer eco de algo, de lo contrario, use .alwayspara capturarlo.
Solomon Closson
20

Lo que debe hacer es agregar die();al final de su función.

Vea la razón y más aquí: http://codex.wordpress.org/AJAX_in_Plugins

Notas:

  • Deberías hacer echoalgo antes de ejecutar die. Esto evitará errores del servidor y ayudará al depurar.
Francisco Corrales Morales
fuente
77
Esta es la respuesta al problema WP AJAX 0.
Ben Racicot
En realidad, si usted acaba de añadir die()y sin eco de algo, esto también le dará un error de servidor interno 500, y volver 0a wp-admin/admin-ajax.php. Siempre debe hacer eco de algo, incluso si solo está configurando valores y no es necesario devolver nada. De lo contrario, si no hace eco de nada y die()tiene que usarlo .always()para capturarlo, porque no estará dentro .done(), lo estará .fail()porque muere sin nada = 500 Error.
Solomon Closson
¿tiene algunos enlaces o código de trabajo para que podamos echar un vistazo? @SolomonClosson
Francisco Corrales Morales
Todas mis respuestas han sido probadas en entornos en vivo. Es muy simple probar esto, solo haga una die();función en la función ajax en el functions.phparchivo sin hacer eco de nada antes de esto, y llame a la acción a través de ajax, por ejemplo:var testing = $.ajax( ... ); testing.fail(function(response) { console.log('Failed ' + response); }); testing.done(function(response) { console.log('Success ' + response); }); testing.always(function(response) { console.log('Ajax Request complete: ' + response); });
Solomon Closson
Notarás, aparecerá Failed, la respuesta será un error interno del servidor 500.
Solomon Closson
2

Entonces lo resolví. No fue el jQuery como tal, aunque he mejorado eso, fue la ubicación de la función de devolución de llamada. Lo moví al archivo principal del complemento y funcionó.

Apina
fuente
44
¿Puedes mostrar cómo lo hiciste?
Francisco Corrales Morales
1
Tengo este mismo problema, ¿podría mostrar cómo solucionó esto?
Jeremy
Otra respuesta está aquí: wordpress.stackexchange.com/a/131397 @Jeremy
Francisco Corrales Morales
2

Tengo el mismo problema Y lo resolvió. Debe enviar la variable "acción" como en el ejemplo:

var dataString = {lat: '55.56', lng: '25.35', action:'report_callback'};
 $.ajax({                            
        url: "http://domain.net/wp-admin/admin-ajax.php",  
        type: "POST",
        //some times you cant try this method for sending action variable
        //action : 'report_callback',
        data:dataString,        
        success: function(data){ 
            console.log(data);

            },
        error: function() {
            console.log("Error");            
        }
    });

Porque en wp-admin / admin-ajax.php es el controlador de la variable de acción:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26
Mcart
fuente
44
La OP hace enviar un actionparámetro. Si bien esto puede haber funcionado para usted, no fue el problema aquí.
s_ha_dum
1

Intenta ejecutar este código en la consola

jQuery.post(ajaxurl, {action:'cleanlinks_ajax_get_post_data'}, function(response) {
     console.log (response);
});

Puedo ver muchas cosas mal acerca de su código JavaScript y esa podría ser la razón.

Omar Abid
fuente
Bueno, está surgiendo muchas cosas que no entiendo completamente. Lo que sí entiendo: ReadyState 4, estado 200, responseText "0". Y luego aparece la respuesta 0. ¿Si hay algo en específico que debería estar buscando aquí? Si hay problemas con el código, indíquelos y puedo investigarlos, todavía estoy aprendiendo jQuery.
Apina
¿tienes tu sitio funcionando en vivo?
Omar Abid
No, es localhost
Apina
Difícil de decir. ¿Podría intentar ejecutar console.info (ajaxurl); y ves lo que da?
Omar Abid
1
intente reemplazar ajaxurl con ' localhost / wp-admin / admin-ajax.php ' y vea lo que ofrece
Omar Abid
1

También tuve este problema, y ​​fue el hecho de que estaba usando en returnlugar de echoen mi función PHP. Cambiándolo a echoarreglado.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
Seano
fuente
0

Tuve el mismo problema, para solucionarlo lo usé wp_die()al final de mi función justo después de un echo. No olvides pasar tu acción en tu guión.

Para estar seguro, verifique si su función tiene que usar wp_ajax_noprivlike wp_ajax.

Yann J
fuente
0

Solo como referencia, para cualquiera que llegue aquí buscando en Google "la solicitud ajax está devolviendo 0": recuerde cuando agregue la acción ajax al método del objeto para asegurarse de que el modificador de acceso a los métodos sea public.

add_action( 'wp_ajax_my_action', [$object, 'my_method']);

add_actionsimplemente silencia si no puede llamar a su método fuera de $object.

Marecky
fuente
0

Si no utiliza la función wp_localize_script () para establecer la url de ajax, admin ajax devuelve 0. Creo que es un error de Wordpress. Aquí hay un ejemplo:

    wp_enqueue_script( 'search_js', get_template_directory_uri() . '/js/search.js', array( 'jquery' ), null, true );    
    wp_localize_script( 'search_js', 'ajaxurl', admin_url( 'admin-ajax.php' ) );

El archivo javascript (search.js):

    $('#search_input').autocomplete({
    source: function(request, response) {

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajaxurl,
            data: 'action=my_custom_action_search&search_criteria=' + request.term,
            success: function(data) {
                response(data);
            },
            error: function(errorThrown){
                console.log(errorThrown);
            } 
        });
    },
    minLength: 3
});
Alain-Aymerick FRANCOIS
fuente
0
jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {
       $.ajax({
            type:'POST',
            url: ajaxurl,
            data: {
                action : 'ajax_filter',
                currentid : 'currentid'
            },
            success: function (result) {
                console.log(result);
                $result = $(result);
                        $result.fadeIn('7000');
                        $("#showresults").html(result);

            },
            error: function (xhr, status) {
                alert("Sorry, there was a problem!");
            },
            complete: function (xhr, status) {
                $('#showresults').slideDown('slow')
            }
            });
     });
}); 

// función de código php

<?php
    add_action( 'wp_ajax_nopriv_ajax_filter', 'ajax_filter' );
    add_action( 'wp_ajax_ajax_filter', 'ajax_filter' );
    function ajax_filter(){
        $date = isset($_POST['date']) ? $_POST['date'] : 0;
        echo $date;
        die();
    }
?>
Ngocheng
fuente
Solo publicar código no es bueno, ¿puede explicar qué hace este código?
bravokeyl
importante: $ date = isset ($ _ POST ['date'])? $ _POST ['fecha']: 0; Y la función die ();
Ngocheng
0

Aquellos que obtienen el error 0 :), action => 'action'

var data = { 'action': 'firmabilgilerikaydet', 'data': form_data };

$.post(ajaxurl, data, function(response) { alert(response); });
Savaş Hasçelik
fuente
-1
PRUEBA:

add_action ('init', 'ly_form_ajax_init');


función ly_form_ajax_init () {
    wp_register_script ('ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', array ('jquery'));
    wp_enqueue_script ('ly-form-ajax-script');

    wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', array (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url (),
        'loadingmessage' => __ ('')
    ));
}
// La acción es: contact_ajax
add_action ('wp_ajax_contact_ajax', 'mi_función');
add_action ('wp_ajax_nopriv_contact_ajax', 'my_function');

function my_function () {
    ob_clean ();
    echo "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * Código corto en una página como esta: [ly-form]
 * @param type $ atts
 * @param type $ content
 * @cadena de retorno
 * /
function ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// Se mostrará el formulario HTML,
función html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Họ đệm *

'; $ html. = '

Tên *

'; $ html. = '

Địa chỉ *

'; $ html. = '

Email *

'; $ html. = '

Nội estiércol * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; devolver $ html; } Y AQUÍ js (ly-script.js): (función ($) { $ (documento) .ready (función () { // Realizar el envío del formulario AJAX $ ('form.ly-form-ex'). on ('submit', función (e) { e.preventDefault (); $ ('# cargando'). html ('cargando ...'); var dataString = {action: 'contact_ajax'}; $ .ajax ({ tipo: "POST", url: ly_form_ajax_object.ajaxurl, data: dataString, éxito: función (datos) { $ ('# cargando'). html (datos); }, error: function (errorThrown) { alerta (error lanzado); } }); }); }); // termina listo }) (jQuery);

Espero que sea útil para usted, mejor

Ly Van Vu
fuente
Es posible que desee explicar el por qué :)
kaiser
La conclusión aquí puede ser ob_clean (); función. Puedes hacer y experimentar
Ly Van Vu
-2

Intenta agregar una ifdeclaración:

function my_function(){
$id = $_POST['variation_id'];

    if(isset($_POST['variation_id'])) { 


//your coded function


die();
}



}// end function
xtianity
fuente
1
¿Cómo resolvería eso el problema? Tenga en cuenta la respuesta aceptada y el código original.
fuxia