How to call ajax in wordpress

My ajax call output always shows 0 as the output doesn't know why

As functions.php

I have this 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' );

      

And my ajax call is in 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); 

});

      

I am making an ajax call in wordpress without using a plugin, but I am not getting what I am passing in. Even if I print $ abc it will show 0.

+5


source to share


4 answers


The backend has a global variable ajaxurl, which is defined by WordPress itself.

This variable is not created by WP in the frontend. This means that if you want to use AJAX calls in the front-end, you must define such a variable yourself.

A good way to do this is to use wp_localize_script.

Let's assume your AJAX calls are in my-ajax-script.js file, then add wp_localize_script for that JS file like:



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

      

After localizing your JS file, you can use the my_ajax_object in your JS file:

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

      

+14


source


Add admin-ajax.php usingadmin_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


source


If you get 0 in response, it means your ajax call is working correctly. But you haven't defined $ wpdb as a global variable in your get_data function. Check your error log, you should see an error there. Try:

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


source


    <form type="post" action="" id="newCustomerForm">

    <label for="name">Name:</label>
    <input name="name" type="text" />

    <label for="email">Email:</label>
    <input name="email" type="text" />

    <label for="phone">Phone:</label>
    <input name="phone" type="text" />

    <label for="address">Address:</label>
    <input name="address" type="text" />

    <input type="hidden" name="action" value="addCustomer"/>
    <input type="submit">
    </form>
    <br/><br/>
    <div id="feedback"></div>
    <br/><br/>
// function.php

wp_enqueue_script('jquery');

function addCustomer(){

global $wpdb;

$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$address = $_POST['address'];

if($wpdb->insert('customers',array(
'name'=>$name,
'email'=>$email,
'address'=>$address,
'phone'=>$phone
))===FALSE){

echo "Error";

}
else {
echo "Customer '".$name. "' successfully added, row ID is ".$wpdb->insert_id;

}
die();
}
add_action('wp_ajax_addCustomer', 'addCustomer');
add_action('wp_ajax_nopriv_addCustomer', 'addCustomer');


// java script


?>
<script type="text/javascript">
jQuery('#newCustomerForm').submit(ajaxSubmit);

function ajaxSubmit(){

var newCustomerForm = jQuery(this).serialize();

jQuery.ajax({
type:"POST",
url: "/wp-admin/admin-ajax.php",
data: newCustomerForm,
success:function(data){
jQuery("#feedback").html(data);
}
});

return false;
}
</script>

      

0


source







All Articles