【问题标题】:Simple WordPress AJAX resulting in 400 Error简单的 WordPress AJAX 导致 400 错误
【发布时间】:2018-12-22 12:09:43
【问题描述】:

我已经仔细研究了其他线程的 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

【问题讨论】:

  • 访问https://{mysite}.com/wp-admin/admin-ajax.php?action=bp_check_user_role,看看您是否看到“嗨!”文本。如果不是,那么您的 AJAX 操作可能是在 WordPress 触发所有已注册的 AJAX 操作之后注册的。
  • 它返回 0 - 感谢您的引导。我用于 PHP 的代码片段插件可以选择仅在前端或后端运行代码,为了提高效率,我只运行 PHP 前端。我将其切换为仅后端,现在它可以工作了!
  • Sally,如果您发布答案,我会很高兴地评论调试步骤如何帮助我并将其标记为正确 :) 非常感谢!
  • 很高兴我的建议/评论对您有所帮助。我已经发布了一个答案,希望它也能帮助其他人。 =)

标签: javascript php ajax wordpress


【解决方案1】:

正如我在评论中指出的那样:

访问 https://{mysite}.com/wp-admin/admin-ajax.php?action=bp_check_user_role 看看你是否看到“Hi!”文字。

为什么要访问该网址?

验证您的 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 '操作'很可能是 没有注册,或者“action”的PHP回调没有没有被调用,因为“action”是在do_action()调用之后注册的。

可能并非总是如此;但是,它可以成为解决 AJAX 问题的一个很好的“急救”。

【讨论】:

  • 对于其他有此问题的人,我通过“代码片段”插件在 sn-p 中运行我的 PHP 代码,并选择了“仅在前端运行”。这阻止了代码在 wp-admin 区域中执行,因此永远不会注册我的 AJAX 操作以供 wp-admin/admin-ajax.php 发现。再次感谢 Sally 帮助我!
猜你喜欢
  • 2019-01-12
  • 2021-12-13
  • 2022-01-17
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
相关资源
最近更新 更多