skip to Main Content

I am trying to delete database row using button, (this is inside my plugin in admin area)
but i am not able to figure out why my ajax call is not working.
Every time i try i recive: 400 bad request all the time.
So i did not manage it yet to call the function properly

this is my button:

<button  class="deletebutton" <?php echo 'value="' . $data->id . '"' ?> class="delete"> delete</button>

And i use:

add_action('wp_ajax_delete_data', 'delete_data');

MY function: (i know it work i have use it many times before

'function delete_data($element_id){
global $wpdb;
$tablename = $wpdb->prefix . 'my_table';
$wpdb->delete($tablename, array('id' => $element_id));

}’

And Jquery/AJAX <- here is the problem i think

<script>
    var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
    jQuery(document).ready(function() {

         jQuery(".deletebutton").click(function(){
            var element_id = this.value;
            jQuery.ajax({
                url: ajaxurl,
                type: 'POST',
                action: 'delete_data',
                data: element_id
                dataType: 'data',

            });
        });
});

    </script>

2

Answers


  1. You have given the wrong actions name. see more information here

    Change this line

    `add_action('wp_ajax_worktmp_delete_absence', 'delete_data');`
    

    With this

    `add_action('wp_ajax_delete_data', 'delete_data');`
    
    Login or Signup to reply.
  2. So the proper of doing this is

    Create a separate js file or you can use it upon the existing js file like following while you are enqueuing your script:

    wp_register_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . '{your_js_file_location}', array( 'jquery' ), $this->version, false );
    wp_localize_script( $this->plugin_name, 'test_ajax_object', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
    wp_enqueue_script($this->plugin_name);
    

    Then

    add_action('wp_ajax_delete_data', 'delete_data');
    

    if it is for normal user hten add the folowwing as well

    add_action('wp_ajax_nopriv_delete_data', 'delete_data');
    

    Then in your js file

            jQuery(document).ready(function($) {
                 $(".deletebutton").click(function(){
                    var element_id = this.value;
                    $.ajax({
                        url: test_ajax_object.ajaxurl,
                        type : 'post',
                        data : {
                            "action" : 'delete_data', "data_id":element_id},
                        success: function( response ) {
                            console.log(response);
                        }
                   });
                });
             });
    

    And in your php file

    function delete_data(){
    global $wpdb;
    $element_id = $_POST['data_id'];
    $tablename = $wpdb->prefix . 'my_table';
    $wpdb->delete($tablename, array('id' => $element_id));
    }
    

    This might work, try once

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search