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:在没有插件的情况下集成 Mailchimp 错误请求 400 Ajax URL
Wordpress 在使用 fetch API 的 ajax 调用上返回 400 Bad Request
尝试从 ajax(Wordpress 插件)将 FormData 中的 Blob 发布到 php 时出现 400(错误请求)