redirect does not work in ajax function

I’m using ajax to post the form data. In the end I want to redirect to homepage. I’m trying following code, it does not work. It returns error 302.
How can I redirect in the following function? Thanks.

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

function custom_register(){

    //process

    wp_redirect( home_url() );
    exit;
}

Related posts

3 comments

  1. The AJAX request runs in the background. Redirects here do not affect the main page. And 302 is not an error, it is just a status code.

    Your AJAX response should return either the URL and the status code to the calling page or just a number like 1. Then you handle the redirect in the calling page:

    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;
            }
        );
    });
    
  2. It’s some years behind but I think this answer can help others:

    I have used a function to redirect from a JS AJAX call. First, it sets some values to database and then tries to redirect in this way:

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

    But it just returns same page followed by ‘undefined’.

    I finally solved directly the redirection part in JS:

    window.location.href = url; // keeps page history
    

    Works also :

    window.location.replace( url ); // cleans page history
    
  3. If you want to redirect then use javascript window.lcation="your url" in your php code.

    Try this in your function that is called by the ajax call;

    add_action('wp_ajax_nopriv_custom_register', 'custom_register');
    add_action('wp_ajax_custom_register', 'custom_register');
    
    function custom_register(){
    
        //process
    
        $url = home_url(); 
    
        ?>
           <script>
    
            demo(); //function name of jscript
    
            function demo()
            {
                window.location="<?php echo $url ?>";
            }
    
           </script>
    
        <?php exit;
    }
    

Comments are closed.