简单的WordPress AJAX导致400错误

时间:2018-07-14 07:56:44

标签: 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>

在我的代码片段插件中,我有以下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

1 个答案:

答案 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问题。