Редирект не работает в ajax-функции WordPress

9 февр. 2014 г., 00:08:24
Просмотры: 14.4K
Голосов: 4

Я использую ajax для отправки данных формы. В конце хочу сделать редирект на главную страницу. Пробую следующий код, но он не работает. Возвращает ошибку 302. Как можно сделать редирект в данной функции? Спасибо.

add_action('wp_ajax_nopriv_custom_register', 'custom_register');
add_action('wp_ajax_custom_register', 'custom_register');

function custom_register(){

    //обработка данных

    wp_redirect( home_url() );
    exit;
}
0
Все ответы на вопрос 3
0

AJAX-запрос выполняется в фоновом режиме. Перенаправления здесь не влияют на основную страницу. И 302 — это не ошибка, а просто код состояния.

Ваш AJAX-ответ должен возвращать либо URL и код состояния на вызывающую страницу, либо просто число, например 1. Затем вы обрабатываете перенаправление на вызывающей странице:

jQuery( document ).ready( function( $ ) {
    var url = '<?php echo home_url(); ?>';
    $( '#ajaxtrigger' ).on( 'click',
        function() {
            $.post( ajaxurl, {}, function( response ) {
                if ( 1 == response )
                    top.location.replace(url);
            });
            return false;
        }
    );
});
9 февр. 2014 г. 00:18:40
0

Этот ответ уже несколько лет, но я думаю, он может помочь другим:

Я использовал функцию для редиректа из JS AJAX вызова. Сначала она устанавливает некоторые значения в базу данных, а затем пытается выполнить редирект таким образом:

if (wp_safe_redirect( $url ))
    exit();

Но это просто возвращает ту же страницу с добавлением 'undefined'.

В итоге я решил проблему, выполнив редирект напрямую в JS:

window.location.href = url; // сохраняет историю страницы

Также работает:

window.location.replace( url ); // очищает историю страницы
20 мая 2022 г. 17:57:54
1
-3

Если вам нужно выполнить перенаправление, используйте JavaScript window.location="ваш URL" в вашем PHP коде.

Попробуйте этот вариант в функции, вызываемой AJAX запросом:

add_action('wp_ajax_nopriv_custom_register', 'custom_register');
add_action('wp_ajax_custom_register', 'custom_register');

function custom_register(){

    //обработка данных

    $url = home_url(); 

    ?>
       <script>

        demo(); //название JavaScript функции

        function demo()
        {
            window.location="<?php echo $url ?>";
        }

       </script>

    <?php exit;
}
30 сент. 2014 г. 12:48:14
Комментарии

Как это отвечает на вопрос?

Johannes Pille Johannes Pille
30 сент. 2014 г. 12:54:54