Home > Enterprise >  Wordpress, admin menu, Ajax 400 bad request
Wordpress, admin menu, Ajax 400 bad request

Time:10-28

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>

CodePudding user response:

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

CodePudding user response:

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

  • Related