【问题标题】:Wordpress, admin menu, Ajax 400 bad requestWordpress、管理菜单、Ajax 400 错误请求
【发布时间】:2021-12-13 09:10:39
【问题描述】:

我正在尝试使用按钮删除数据库行,(这是在我的管理区域插件中) 但我无法弄清楚为什么我的 ajax 调用不起作用。 每次我尝试我都会收到:400 错误的请求。 所以我还没有管理它来正确调用函数

这是我的按钮:

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

我使用:

add_action('wp_ajax_delete_data', 'delete_data');

我的功能:(我知道它可以工作我以前用过很多次

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

}'

还有 Jquery/AJAX

<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>

【问题讨论】:

  • 你的ajaxurl 是什么?你试过控制台吗?
  • 更新帖子以显示它。
  • 可以分享一下网址吗?
  • 我正在使用 bitnami 容器在本地主机上进行操作
  • 代码在哪里?

标签: ajax wordpress wordpress-plugin-creation


【解决方案1】:

您提供了错误的操作名称。查看更多信息here

改变这一行

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

有了这个

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

【讨论】:

  • 我解决了这个问题,所以这不是问题,仍然无法正常工作
【解决方案2】:

所以正确的做法是

创建一个单独的 js 文件,或者您可以在将脚本排入队列时将其用于现有的 js 文件,如下所示:

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

然后

add_action('wp_ajax_delete_data', 'delete_data');

如果是普通用户,也可以添加以下内容

add_action('wp_ajax_nopriv_delete_data', 'delete_data');

然后在你的js文件中

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

在你的 php 文件中

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

这可能有效,请尝试一次

【讨论】:

  • 非常感谢,这个解决方案 100% 对我有用。它是在我更改为您的 ajax 调用构造之后开始的。
猜你喜欢
  • 2019-01-12
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多