Admin Ajax renvoie 0

23

Je suis relativement nouveau dans jQuery et AJAX en particulier. J'ai un petit problème avec la valeur de retour étant toujours 0, bien que je pense que c'est en fait le message de succès et qu'il ne renvoie rien.

J'ai parcouru le vers Google et j'ai la fonction die () sur le rappel PHP et je pense que les add_actions sont correctes.

Je travaille sur un hôte local, bien que je doute que cela l’affecte et tout cela se trouve dans l’administrateur, pas dans le front-end. J'ai également vérifié que le js est mis en file d'attente et localisé.

Je reçois un message 200 OK dans la zone de développement de Chrome.

J'ai également testé la version de base d'AJAX de enlace et elle a également renvoyé 0, ce qui me fait me demander si c'est autre chose que le code décrit ci-dessous.

Pour le moment, j'essaie simplement de le faire renvoyer quelque chose à jQuery. Toute aide serait la bienvenue.

Le 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

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


}
    
posée Apina 27.04.2013 - 17:02

12 réponses

1

Alors j'ai réglé le problème. Ce n'était pas le jQuery en tant que tel, bien que j'aie amélioré cela, c'était le placement de la fonction de rappel. Je l'ai déplacé dans le fichier de plugin principal et cela a fonctionné.

    
réponse donnée Apina 28.04.2013 - 18:10
37

Une réponse 0 signifie que l'action n'est pas définie (dans les données ajax) ou que la fonction de rappel de l'action est introuvable.

    
réponse donnée helgatheviking 27.07.2013 - 05:00
19

Ce que vous devez faire est d’ajouter die(); à la fin de votre fonction.

Voir la raison et plus ici: enlace

Notes:

  • Vous devriez echo quelque chose avant d'exécuter die . Cela évitera les erreurs de serveur et vous aidera lors du débogage.
réponse donnée Francisco Corrales Morales 27.01.2014 - 21:40
2

J'ai le même problème. Et résolu. Vous devez envoyer la variable "action" comme dans l'exemple:

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

Parce que dans wp-admin / admin-ajax.php, le gestionnaire de la variable d'action est:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26
    
réponse donnée Mcart 11.05.2014 - 21:54
1

Essayez d'exécuter ce code sur la console

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

Je peux voir beaucoup de choses qui ne vont pas dans votre code JavaScript et cela pourrait en être la raison.

    
réponse donnée Omar Abid 27.04.2013 - 19:22
0

J'avais aussi ce problème, et c'était le fait que j'utilisais return au lieu de echo dans ma fonction PHP. Le changer en echo le corrige.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
    
réponse donnée Seano 29.03.2016 - 21:07
0

J'ai eu le même problème. Pour résoudre le problème, j’ai utilisé wp_die() à la fin de ma fonction juste après une echo . N'oubliez pas de transmettre votre action à votre script.

Pour être sûr, vérifiez si votre fonction doit utiliser wp_ajax_nopriv comme wp_ajax .

    
réponse donnée Yann J 18.07.2016 - 17:53
0

Juste pour référence, pour tous ceux qui viennent ici googler "demande ajax renvoie 0": N'oubliez pas lorsque vous ajoutez une action ajax à la méthode de l'objet pour vous assurer que le modificateur d'accès aux méthodes est public .

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

add_action se contente de silences si elle ne peut pas appeler votre méthode en dehors de $object .

    
réponse donnée Marecky 27.04.2017 - 22:36
0

Si vous n'utilisez pas la fonction wp_localize_script () pour définir l'adresse URL ajax, admin ajax renvoie 0. Je pense que c'est un bogue Wordpress. Voici un exemple:

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

Le fichier 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
});
    
réponse donnée 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')
            }
            });
     });
}); 

// fonction de code 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();
    }
?>
    
réponse donnée 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 );

J'espère que cela vous sera utile, Meilleur

    
réponse donnée Ly Van Vu 22.03.2017 - 09:34
-2

Essayez d'ajouter une déclaration if :

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

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


//your coded function


die();
}



}// end function
    
réponse donnée xtianity 23.09.2013 - 03:33

Lire d'autres questions sur les étiquettes