how to make an ajax call to redirect

I have an ajax call method like following:

Instead of redirect_to render a partial with a line of JS like this:

<script type="text/javascript">document.location="/login"</script>

HTH,

Hi daociyiyou ,

Try this:

def find_created_actions
    unless @if_login
       flash[:login]="..."
       redirect_to(:controller=>"login",:action=>"login")
    end
    if @if_login
       @user_cactions=@user.sponsored_actions
       render :update do |page|
          page.replace_html 'element_id',
            :partial => "created_actions", :object => @user_cactions
       end
    else
       render :update do |page|
          page.redirect_to(:controller=>"login",:action=>"login")
       end
    end
end

And make sure you're *not* using the :update option on your remote_form.
'page.redirect_to()' will generate javascript similar to Hassan's
aforementioned suggestion.

Sjoerd Andringa wrote:

Hi daociyiyou ,

Try this:

def find_created_actions
    unless @if_login
       flash[:login]="..."
       redirect_to(:controller=>"login",:action=>"login")
    end
    if @if_login
       @user_cactions=@user.sponsored_actions
       render :update do |page|
          page.replace_html 'element_id',
            :partial => "created_actions", :object => @user_cactions
       end
    else
       render :update do |page|
          page.redirect_to(:controller=>"login",:action=>"login")
       end
    end
end

And make sure you're *not* using the :update option on your remote_form.
'page.redirect_to()' will generate javascript similar to Hassan's
aforementioned suggestion.

Hi, just a note that this does not work. Because the redirect gets
trapped inside the Ajax call. If you use firebug you can see what
happens.

So it seems the only way to redirect is to use a javascript redirect as
mentioned on:
http://stackoverflow.com/questions/1215177/cannot-do-response-redirect-from-page-with-ajax-controls

Vicer Ontero wrote:

And make sure you're *not* using the :update option on your remote_form.
'page.redirect_to()' will generate javascript similar to Hassan's
aforementioned suggestion.

Hi, just a note that this does not work. Because the redirect gets
trapped inside the Ajax call. If you use firebug you can see what
happens.

So it seems the only way to redirect is to use a javascript redirect as
mentioned on:
http://stackoverflow.com/questions/1215177/cannot-do-response-redirect-from-page-with-ajax-controls

You're right. There's a confinient helper to generate the right
javascript
(http://apidock.com/rails/ActionView/Helpers/PrototypeHelper/JavaScriptGenerator/GeneratorMethods/redirect_to):

def find_created_actions
    unless @if_login
        render :update do |page|
            flash[:login]="..."
            page.redirect_to(:controller=>"login",:action=>"login")
        end
    end
    [...]
end

Here is a cleaner way. Just put the following code on your
application_controller.rb.
Now, redirect_to should work with Ajax calls as well as regular
requests.

def redirect_to(options = {}, response_status = {})
  if request.xhr?
    render(:update) {|page| page.redirect_to(options)}
  else
    super(options, response_status)
  end
end

Cheers,
Glen

Glen's solution works perfect !
Thank you very much, your tip is a must have of every rails project,
IMHO :slight_smile: