Wordpress、管理菜单、Ajax 400 错误请求

Posted

技术标签:

【中文标题】Wordpress、管理菜单、Ajax 400 错误请求【英文标题】:Wordpress, admin menu, Ajax 400 bad request 【发布时间】: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 容器在本地主机上进行操作 代码在哪里? 【参考方案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 调用构造之后开始的。

以上是关于Wordpress、管理菜单、Ajax 400 错误请求的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 中的 AJAX 只返回 0

Wordpress:在没有插件的情况下集成 Mailchimp 错误请求 400 Ajax URL

Wordpress 在使用 fetch API 的 ajax 调用上返回 400 Bad Request

尝试从 ajax(Wordpress 插件)将 FormData 中的 Blob 发布到 php 时出现 400(错误请求)

web前端 ajax请求报415/400错

使用 ajax 通过 WordPress 菜单在 div 中按类别加载最新帖子