我仔细研究了其他线程的 WordPress AJAX 问题,有 400 个错误,但我似乎无法正确理解这一点。
我在 WordPress 中尝试实现一些 AJAX。现在我有一些虚拟函数只是为了了解 AJAX 功能,但我无法让它们工作。
在我的页面模板上,我在页面底部有这个 Javascript:
<script>
var ajax_url = "<?php echo admin_url( 'admin-ajax.php' ); ?>";
var data = { action : 'bp_check_user_role' };
jQuery.post(ajax_url, data, function (success) { console.log(success); });
</script>
在我的代码片段插件中,我有这个 PHP:
function bp_check_user_role() {
echo "Hi!";
die();
}
add_action('wp_ajax_bp_check_user_role', 'bp_check_user_role');
add_action('wp_ajax_nopriv_bp_check_user_role', 'bp_check_user_role');
我觉得我正确地执行了这两个步骤,但是当我加载页面时,代码不起作用,我得到了这个(我已经擦洗了 {mysite},但它是正确的):
jquery.js?ver=1.12.4:4 POST https://{mysite}.com/wp-admin/admin-ajax.php 400 ()
我犯了什么想法或明显的错误?我似乎无法破解这个:(
除了引用 WordPress Codex 之外,我还阅读过的主题: 奥 git _a https://wordpress.stackexchange.com/questions/220661/use-ajax-without-a-plugin
最佳答案
正如我在评论中指出的:
Visit
https://{mysite}.com/wp-admin/admin-ajax.php?action=bp_check_user_role
and see if you see the "Hi!" text.
为什么要访问该网址?
验证您的 AJAX“操作”是否已(正确)注册,并且 AJAX 响应也符合您的预期。
附加说明
如果您查看 wp-admin/admin-ajax.php
中的代码,您会看到以下内容:
if ( is_user_logged_in() ) {
// If no action is registered, return a Bad Request response.
if ( ! has_action( 'wp_ajax_' . $_REQUEST['action'] ) ) {
wp_die( '0', 400 );
}
...
do_action( 'wp_ajax_' . $_REQUEST['action'] );
} else {
// If no action is registered, return a Bad Request response.
if ( ! has_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] ) ) {
wp_die( '0', 400 );
}
...
do_action( 'wp_ajax_nopriv_' . $_REQUEST['action'] );
}
如您所见,它表示 //If no action is Registered, return a Bad Request response.
,因此,如果您的 AJAX JavaScript 回调收到 400 Bad Request 错误/响应,那么您的 AJAX“操作”可能未注册,或者“操作”的 PHP 回调未被调用,因为“操作” ' 在 do_action()
调用之后注册。
情况可能并非总是如此;然而,它可以成为解决 AJAX 问题的一个非常好的“急救方法”。
关于javascript - 简单的 WordPress AJAX 导致 400 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51336505/