How to call ajax in wordpress

后端 未结 7 477
青春惊慌失措
青春惊慌失措 2020-11-28 10:49

My ajax call output is always showing 0 as output don\'t know why

In functions.php I have this code

function get_data() {
    $abc = \'         


        
相关标签:
7条回答
  • 2020-11-28 11:08

    Step 1: Add ajax 'wp_enqueue_script' file in function file where you have to add other 'wp_enqueue_script' or 'wp_enqueue_style' files

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

    Step 2:Now you need to to create function, where you want to get response,using ajax e.g below

     add_action('wp_footer','add_ajaxex_in_footer');
       function add_ajaxex_in_footer()
        { ?>
    
    <script type="text/javascript">
        jQuery('#sbmtbtn').click(function(){
        jQuery.ajax({
        type:"POST",
        url:my_ajax_object.ajax_url,
        data: {action:'my_special_ajax_call_enroll_cours'},
        success:function(res){
         console.log(res);
        }
       });
      });</script><?php 
     }
    

    Step 3: Now you have to create function where you have to write query,

    add_action('wp_ajax_my_special_ajax_call_enroll_cours', 'enroll_cours');
    add_action('wp_ajax_nopriv_my_special_ajax_call_enroll_cours', 'enroll_cours');
    
     function enroll_cours()
      { 
          echo "Here you van write Query or anything"; 
       }
    exit;
    }
    

    => If you want fire ajax request after onClick button,just pass the button ID

    <input type="button" id="sbmtbtn" name="Save">
    
    0 讨论(0)
  • 2020-11-28 11:14

    If you are getting 0 in the response, it means your ajax call is working correctly. But, you have not defined $wpdb as a global variable in your function get_data. Check your error log, you must be seeing 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 讨论(0)
  • 2020-11-28 11:18
    <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/>
    

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

    javascript

    <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 讨论(0)
  • 2020-11-28 11:19

    I had the same problem. I was new to WordPress. Therefore, I am explaining here so that every new learner can understand how ajax is calling in WordPress.

    First, create a function in function.php file that resides under wp-content/theme/selected_theme folder. Here, selected_theme maybe your theme name.

    In the above question, a function is created with the name get_data();

        function get_data() {
            
            echo  "test";
            wp_die();  //die();
        }
    
    add_action( 'wp_ajax_nopriv_get_data', 'get_data' );
    add_action( 'wp_ajax_get_data', 'get_data' );
    

    in the above two lines,

    1. The add_action method is used to implement the hook. Here, I am passing the two parameters, first is wp_ajax_nopriv_get_data. Here, you can replace get_data with your choice. and the section parameter is get_data which is the function name that you want to call.
    2. In the second add_action, I am passing the two parameters, first is wp_ajax_get_data. Here, you can replace get_data with your choice. and the section parameter is get_data which is the function name that you want to call.

    Here, wp_ajax_nopriv call if the user is not logged in and wp_ajax called when the user is logged in.

    jQuery.ajax({
        type: "post",
        dataType: "json",
        url: "/wp-admin/admin-ajax.php", //this is wordpress ajax file which is already avaiable in wordpress
        data: {
            action:'get_data' //this value is first parameter of add_action,
            id: 4
        },
        success: function(msg){
            console.log(msg);
        }
    });
    
    0 讨论(0)
  • 2020-11-28 11:31

    In backend there is global ajaxurl variable defined by WordPress itself.

    This variable is not created by WP in frontend. It means that if you want to use AJAX calls in frontend, then you have to define such variable by yourself.

    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 this JS file like so:

    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 my_ajax_object 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);
        }
    });
    
    0 讨论(0)
  • 2020-11-28 11:31

    Add admin-ajax.php by using 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>
    
    0 讨论(0)
提交回复
热议问题