web-dev-qa-db-fra.com

Admin Ajax est de retour

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 réussite et qu'il ne renvoie rien.

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

Je travaille sur un hôte local, même si je doute que cela l’affecte et tout cela est dans l’administration, 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 base AJAX de http://codex.wordpress.org/AJAX_in_Plugins et elle a également renvoyé 0, ce qui me fait me demander si c'est autre chose que le code présenté ci-dessous.

En ce moment, j'essaye juste de le faire renvoyer quelque chose à jQuery. Toute aide serait appréciée.

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


}
28
Apina

Alors j'ai travaillé dessus. 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é.

1
Apina

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

40
helgatheviking

Ce que vous devez faire, c'est ajouter die(); à la fin de votre fonction.

Voir la raison et plus ici: http://codex.wordpress.org/AJAX_in_Plugins

Remarques:

  • Vous devez echo quelque chose avant d'exécuter die. Cela évitera les erreurs de serveur et facilitera le débogage.

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 est un gestionnaire de variable d'action:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26
2
Mcart

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 que beaucoup de choses ne vont pas dans votre code JavaScript, ce qui pourrait en être la raison.

1
Omar Abid

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

J'ai eu ce problème aussi, 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();
}
0
Seano

J'ai eu le même problème, pour le résoudre, 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 like wp_ajax.

0
Yann J

Pour référence, pour tous ceux qui viennent ici googler "la demande ajax renvoie 0": rappelez-vous 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 met au silence s'il ne peut pas appeler votre méthode en dehors de $object.

0
Marecky