Admin Ajax está devolviendo 0

23

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 está devolviendo nada.

He rastreado 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.

Aparece un mensaje de 200 OK en el área de desarrolladores de Chrome.

También probé el AJAX básico de enlace y también devolvió 0, lo que me hace preguntarme si es algo diferente a el código que se describe a continuación.

Ahora mismo estoy tratando de hacer que se envíe algo a la jQuery. Cualquier ayuda sería apreciada.

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


}
    
pregunta Apina 27.04.2013 - 17:02

12 respuestas

1

Así que lo resolví. No fue el jQuery como tal, aunque he mejorado eso, fue la colocación de la función de devolución de llamada. Lo moví al archivo de plugin principal y funcionó.

    
respondido por el Apina 28.04.2013 - 18:10
37

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

    
respondido por el helgatheviking 27.07.2013 - 05:00
19

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

Vea el motivo y más aquí: enlace

Notas:

  • Debes echo algo antes de ejecutar die . Esto evitará los errores del servidor y ayudará a la depuración.
respondido por el Francisco Corrales Morales 27.01.2014 - 21:40
2

Tengo el mismo problema. Y lo resolvió. Debe enviar una variable de "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 hay un controlador para la variable de acción:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26
    
respondido por el Mcart 11.05.2014 - 21:54
1

Intente 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 incorrectas sobre tu código JavaScript y esa podría ser la razón.

    
respondido por el Omar Abid 27.04.2013 - 19:22
0

También tuve este problema, y era el hecho de que estaba usando return en lugar de echo en mi función de PHP. Cambiarlo a echo lo arregló.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
    
respondido por el Seano 29.03.2016 - 21:07
0

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

Para estar seguro, verifique si su función tiene que usar echo como wp_ajax_nopriv .

    
respondido por el Yann J 18.07.2016 - 17:53
0

Solo para referencia, para cualquier persona que llegue a 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_action solo se silencia si no puede llamar a su método fuera de $object .

    
respondido por el Marecky 27.04.2017 - 22:36
0

Si no usa la función wp_localize_script () para configurar 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
});
    
respondido por el Alain-Aymerick FRANCOIS 17.10.2017 - 15:26
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')
            }
            });
     });
}); 

// code function 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();
    }
?>
    
respondido por el Ngocheng 22.03.2018 - 05:01
-1
YOU TRY:

add_action('init', 'ly_form_ajax_init');


function 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' => __('')
    ));
}
// Action is: contact_ajax
add_action( 'wp_ajax_contact_ajax', 'my_function' );
add_action( 'wp_ajax_nopriv_contact_ajax', 'my_function' );

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

/**
 * Short code in page like this: [ly-form]
 * @param type $atts
 * @param type $content
 * @return string
 */
function ly_form_shortcode($atts, $content = "") {
    echo html_form_code();
}
add_shortcode('ly-form', 'ly_form_shortcode');

//HTML Form will show,
function html_form_code() {
    $html = "";
    $html.= '';
    $html.= '';

    $html.= '        

Họ đệm *

'; $html.= '

Tên *

'; $html.= '

Địa chỉ *

'; $html.= '

Email *

'; $html.= '

Nội dung * dg

'; $html.= ' '; $html.= ''; $html.= ''; $html.= ''; return $html; } AND HERE js (ly-script.js): ( function( $ ) { $(document).ready(function () { // Perform AJAX form submit $('form.ly-form-ex').on('submit', function(e){ e.preventDefault(); $('#loading').html('loading...'); var dataString = {action:'contact_ajax'}; $.ajax({ type: "POST", url: ly_form_ajax_object.ajaxurl, data: dataString, success: function (data) { $('#loading').html(data); }, error: function (errorThrown) { alert(errorThrown); } }); }); }); // end ready } )( jQuery );

Espero que te sea útil, Mejor

    
respondido por el Ly Van Vu 22.03.2017 - 09:34
-2

Intente agregar una declaración if :

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

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


//your coded function


die();
}



}// end function
    
respondido por el xtianity 23.09.2013 - 03:33

Lea otras preguntas en las etiquetas