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


}

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.


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.

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

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

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.


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

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.


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.


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
});

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();
    }
?>

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); });

-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


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

1
¿Cómo resolvería eso el problema? Tenga en cuenta la respuesta aceptada y el código original.
— fuxia
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.