WordPress重定向不起作用-未接收到AJAX回调响应

时间:2019-04-03 作者:LonelyLodge

我无法在自定义wordpress插件中获得重定向。我在页面上有一个按钮,可以触发调用函数的AJAX操作。

在我的函数中(当我在调试日志中看到“用户未登录”的输出时,肯定会调用该函数),我有:

error_log("User is not logged in!");
wp_redirect(home_url());
exit();
我尝试过的事情:硬编码url,尝试其他url,使用exit();并退出,使用header()

我不知道为什么这不起作用。每个其他类似问题的答案都是add exit();但这对我来说并不奏效。谢谢

编辑:

调整了AJAX回调,如下所示:

<script>

// Create a function to pick up the link click
jQuery(document).ready(function($) {
    $(\'.button\').click(function(e){
        e.preventDefault();
        console.log("Hi")
        jQuery.post(
            game_mode_register.ajax_url, 
            {
                \'action\': \'game-mode-register\',
                \'type\':   $(this).attr("value")
             }.fail(function(response){
                  console.log("ajax response");
                  //window.location.href = response.redirect_url
             });
        );
    });
 });

参数列表后的错误输出:SyntaxError:缺失),引用//窗口后面的行。地方

此外,我的wp\\u重定向似乎被拾取但被阻止。Javascript控制台显示:

阻止加载混合活动内容“http://my_website.com/

我有一个最新的SSL证书。也不知道这意味着什么。

编辑:

从第一个答案给出的方向来看,失败的尝试包括:

wp_send_json_success( $data );
wp_send_json_error( $data );
wp_send_json( $data );
echo json_encode($data);

1 个回复
最合适的回答,由SO网友:MikeNGarrett 整理而成

由于这是一个ajax调用,因此必须让javascript处理重定向

您的代码目前正在为ajax响应执行,它可能工作得很好。

您必须将ajax请求视为浏览器在页面后台发出第二个请求。由于页面已完成渲染,除非用户执行某些操作(如单击按钮)或javascript执行某些操作(如响应ajax请求),否则页面上不会有任何更改。

在php响应中,使用如下内容:

<?php
wp_send_json_error( array( \'message\' => \'Error message\', \'redirect_url\' => home_url() ) );
在ajax请求中,请使用以下内容:

var ajaxPost = jQuery.post(
  game_mode_register.ajax_url, {
    action: \'game-mode-register\',
    type: jQuery(this).attr(\'value\'),
    crossDomain: true
  }, function(response) {
    console.log(\'success\');
  });

ajaxPost.fail(function(response) {
  console.log(\'fail response: \' + response);
  //window.location.href = response.redirect_url
});

UPDATE: code above to match updated question. Also updated to use older core jQuery version.

牢记jQuery.post() 与相同jQuery.ajax({ method: \'POST\'});

在上述情况下,您抛出了一个ajax调用将发现的错误。然后,针对失败的请求启动ajax函数这是处理错误和重定向用户的地方。

相关推荐

从函数.php内修改_POSTS_PAGINATION,而不是模板文件

我知道使用如下函数(在functions.php) 允许我自定义分页选项:function custom_theme_pagination(){ global $wp_query; echo paginate_links(); } 。。。前提是主题文件包含<?php custom_theme_pagination(); ?> 无论我希望分页显示在哪里。然而,我想要实现的是控制<?php the_posts_pagination(); ?