Admin Ajax está retornando 0

23

Sou relativamente novo no jQuery e no AJAX em particular. Eu tenho um pequeno problema com o valor de retorno sempre sendo 0, embora eu acho que esta é realmente a mensagem de sucesso e não está retornando nada.

Eu pesquisei o Google-verso e tenho a função die () no retorno de chamada do PHP e acredito que as add_actions estão corretas.

Estou trabalhando em um host local, embora duvide que isso afete isso e tudo isso está no admin, não no front end. Também verifiquei que o js está enfileirado e localizado.

Recebo uma mensagem 200 OK na área do desenvolvedor do Google Chrome.

Eu também testei o AJAX básico de enlace e ele também retornou 0, o que me faz pensar se é algo diferente de o código descrito abaixo.

Neste momento, estou apenas tentando enviar algo de volta para o jQuery. Qualquer ajuda seria apreciada.

O 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

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


}
    
por Apina 27.04.2013 / 17:02
fonte

12 respostas

1

Então eu resolvi isso. Não foi o jQuery como tal, embora eu tenha melhorado isso, foi o posicionamento da função de retorno de chamada. Mudei para o arquivo do plugin principal e funcionou.

    
por Apina 28.04.2013 / 18:10
fonte
37

Uma resposta 0 significa que a ação não está definida (nos dados do ajax) ou que a função de retorno de chamada da ação não pode ser encontrada.

    
por helgatheviking 27.07.2013 / 05:00
fonte
19

O que você precisa fazer é adicionar die(); no final da sua função.

Veja o motivo e muito mais aqui: enlace

Notas:

  • Você deve echo algo antes de executar die . Isso evitará erros do servidor e ajudará na depuração.
por Francisco Corrales Morales 27.01.2014 / 21:40
fonte
2

Eu tenho o mesmo problema. E resolvido isso. Você deve enviar a variável "action" como no exemplo:

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 em wp-admin / admin-ajax.php é o manipulador da variável de ação:

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

Tente executar este código no console

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

Eu posso ver muitas coisas erradas sobre seu código JavaScript e essa pode ser a razão.

    
por Omar Abid 27.04.2013 / 19:22
fonte
0

Eu também tive esse problema, e foi o fato de que eu estava usando return em vez de echo na minha função PHP. Alterá-lo para echo corrigiu.

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

Eu tive o mesmo problema: para corrigi-lo, usei wp_die() no final da minha função, logo após uma %código%. Não se esqueça de passar sua ação em seu roteiro.

Para garantir, verifique se sua função precisa usar echo como wp_ajax_nopriv .

    
por Yann J 18.07.2016 / 17:53
fonte
0

Apenas para referência, para quem chegar aqui pesquisando "solicitação ajax está retornando 0": Lembre-se de quando você adiciona uma ação ajax ao método do objeto para ter certeza de que o modificador de acesso a métodos é public .

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

add_action apenas silencia se não puder chamar seu método fora de $object .

    
por Marecky 27.04.2017 / 22:36
fonte
0

Se você não usa a função wp_localize_script () para configurar o ajax url, o admin ajax retorna 0. Eu acho que é um erro do Wordpress. Aqui está um exemplo:

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

O arquivo 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
});
    
por Alain-Aymerick FRANCOIS 17.10.2017 / 15:26
fonte
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')
            }
            });
     });
}); 

// função 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();
    }
?>
    
por Ngocheng 22.03.2018 / 05:01
fonte
-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 seja útil para você Melhor

    
por Ly Van Vu 22.03.2017 / 09:34
fonte
-2

Tente adicionar uma declaração if :

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

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


//your coded function


die();
}



}// end function
    
por xtianity 23.09.2013 / 03:33
fonte

Tags