dig*_*com 1 javascript php ajax wordpress
我仔细研究了其他线程的 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>
Run Code Online (Sandbox Code Playgroud)
在我的代码片段插件中,我有这个 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');
Run Code Online (Sandbox Code Playgroud)
我觉得我正确地执行了这两个步骤,但是当我加载页面时,代码不起作用,我得到了这个(我已经擦洗了 {mysite},但它是正确的):
jquery.js?ver=1.12.4:4 POST https://{mysite}.com/wp-admin/admin-ajax.php 400 ()
Run Code Online (Sandbox Code Playgroud)
我有什么想法或明显的错误吗?我似乎无法破解这个:(
除了参考 WordPress Codex 之外,我还阅读过的主题: https: //wordpress.stackexchange.com/questions/220661/use-ajax-without-a-plugin Wordpress Ajax 始终返回 0
正如我在评论中指出的:
访问
https://{mysite}.com/wp-admin/admin-ajax.php?action=bp_check_user_role并查看是否看到“嗨! ”文本。
为什么要访问该 URL?
验证您的 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'] );
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它说// If no action is registered, return a Bad Request response.,因此,如果您的 AJAX JavaScript 回调收到400 Bad Request错误/响应,则您的 AJAX“操作”可能未注册,或者“操作”的 PHP 回调未获得调用是因为“操作”是在调用后do_action()注册的。
情况可能并非总是如此;然而,它可以成为解决 AJAX 问题的一个非常好的“急救方法”。