我已经仔细研究了其他线程的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之外,我还阅读了一些线程: https://wordpress.stackexchange.com/questions/220661/use-ajax-without-a-plugin Wordpress Ajax always returns 0
答案 0 :(得分:1)
正如我在评论中指出的那样:
访问
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'] );
}
如您所见,它显示为// If no action is registered, return a Bad Request response.
,因此,如果您的AJAX JavaScript回调收到 400错误请求错误/响应,则您的AJAX“操作”很可能< em> not 已注册,或者未调用'action'的PHP回调函数 not ,因为{{1}之后 }。
并非总是如此。但是,它可以很好地解决AJAX问题。