javascript - 简单的 WordPress AJAX 导致 400 错误

标签 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 之外,我还阅读过的主题: 奥 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/

相关文章:

php - 需要将数据插入远程数据库的最佳解决方案

php - 运行示例时,phpExcel 类中没有此类文件或目录错误

javascript - 未捕获( promise )TypeError : Cannot set property 'status'

javascript - 如何为 ExtJS 对象创建动态变量名?

php - 在一页上发送并打印 PHP 数组结果?

php - magento $order->getAllItems() 返回两次相同的项目

javascript - 奇怪的 $http POST Angularjs 澄清

javascript - PHP Ajax onkeyup 在我的 Switch 案例网站上不起作用

javascript - 更新代码时保留 var

javascript - Three.js - 选择对象,获取对象 Material