web-dev-qa-db-fra.com

Comment appeler ajax dans wordpress

Ma sortie d'appel ajax affiche toujours 0 car la sortie ne sait pas pourquoi

Dans functions.php j'ai ce code 

function get_data() {
    $abc = '1';
    $result = $wpdb->get_results("SELECT * FROM ".$wpdb->options ." WHERE option_name LIKE '_transient_%'");
    echo  $result; //returning this value but still shows 0
    wp_die();
}

add_action( 'wp_ajax_nopriv_get_data', 'get_data' );
add_action( 'wp_ajax_get_data', 'get_data' );

Et mon appel ajax est en javascript 

$('body').on("click", ".re-reset-btn", function(e){

    var panel = $('#re-compare-bar');       

    $.ajax({
             type : "GET",
             dataType : "json",
             url : "/wp-admin/admin-ajax.php",
             data : {action: "get_data"},
             success: function(response) {

                   alert("Your vote could not be added");
                   alert(response);
                }
        });   

    $("#re-compare-bar-tabs div").remove(); 
    $('.re-compare-icon-toggle .re-compare-notice').text(0); 

});

Je fais un appel ajax dans wordpress sans utiliser de plugin mais je n’obtiens pas ce que je passe. Même si je produis toujours $ abc, il affiche 0.

4
smarttechy

Dans le backend, il existe une variable globale ajaxurl définie par WordPress lui-même.

Cette variable n'est pas créée par WP dans le frontal. Cela signifie que si vous voulez utiliser les appels AJAX en front-end, vous devez alors définir vous-même cette variable.

Une bonne façon de faire est d'utiliser wp_localize_script.

Supposons que vos appels AJAX se trouvent dans le fichier my-ajax-script.js, puis ajoutez wp_localize_script pour ce fichier JS comme suit:

function my_enqueue() {
      wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') );
      wp_localize_script( 'ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
 }
 add_action( 'wp_enqueue_scripts', 'my_enqueue' );

Après avoir localisé votre fichier JS, vous pouvez utiliser l'objet my_ajax_object dans votre fichier JS:

jQuery.ajax({
    type: "post",
    dataType: "json",
    url: my_ajax_object.ajax_url,
    data: formData,
    success: function(msg){
        console.log(msg);
    }
});
12
Vigneshwaran J

Ajoutez admin-ajax.php en utilisant admin_url('admin-ajax.php');

<script type="text/javascript">
    $('body').on("click", ".re-reset-btn", function(e){

            var panel = $('#re-compare-bar');       

            $.ajax({
                     type : "POST",
                     dataType : "json",
                     url : "<?php echo admin_url('admin-ajax.php'); ?>",
                     data : {action: "get_data"},
                     success: function(response) {

                           alert("Your vote could not be added");
                           alert(response);
                        }
                });   

            $("#re-compare-bar-tabs div").remove(); 
            $('.re-compare-icon-toggle .re-compare-notice').text(0); 

        });
    </script>
2
Shital Marakana

Si vous obtenez 0 dans la réponse, cela signifie que votre appel ajax fonctionne correctement ..__ Mais vous n'avez pas défini $ wpdb en tant que variable globale dans votre fonction get_data. Consultez votre journal d’erreurs, vous devez y voir une erreur. Essayer:

function get_data() {
global $wpdb;
        $abc = '1';
        $result = $wpdb->get_results("SELECT * FROM ".$wpdb->options ." WHERE option_name LIKE '_transient_%'");
        echo  $result; //returning this value but still shows 0
        wp_die();

}
0
Awais Umar