Forum: Ruby on Rails Ajax.Request w/standard redirect doesn't render

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Bb4bdf2b184027bc38d4fb529770cde5?d=identicon&s=25 Wes Gamble (weyus)
on 2006-03-20 18:20
I am doing an Ajax call in my page to a controller method like so:

new Ajax.Request('<%= url_for(:action => "target_list_add" )%>', {
asynchronous:true });"

In my controller method "target_list_add", I do something and then I
say:

redirect_to( :action => 'target_list_upload', :layout => false )

I know for certain that this line of code is being reached.

Why does the redirect not occur?

Thanks,
Wes
2ccb2f7699267d258faaafce4ee997df?d=identicon&s=25 Cody Fauser (Guest)
on 2006-03-20 19:18
(Received via mailing list)
Wes,

Since the Ajax call in the background, you need to perform the
redirect with JavaScript, so the easiest way would be for you to use
inline RJS in your controller like follows:

def target_list_add
  render :update do |page|
    page.redirect_to( :action => 'target_list_upload')
  end
end

You'll need Edge Rails or the RJS plugin to do that, though.

If you don't want to use RJS, you could do it the long way like this:

def target_list_add
  @headers['Content-Type'] = 'text/javascript'
  render :text => "window.location.href =  '#{url_for(:action =>
'target_list_upload')}'"
end

On 3/20/06, Wes Gamble <weyus@att.net> wrote:
> I know for certain that this line of code is being reached.
> Rails@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails
>


--
Cody Fauser
http://www.codyfauser.com
Bb4bdf2b184027bc38d4fb529770cde5?d=identicon&s=25 Wes Gamble (weyus)
on 2006-03-20 19:26
Cody,

Thanks for your prompt reply.

Can you go into more detail on what "Since the Ajax call in the
background" means?

I do understand Ajax conceptually, but I'm trying to understand the
nature of a HTTP response in an Ajax context.

Is the root of my issue that there is no HTTP response to give back to
the browser and that is why the Ajax.Request + controller redirect
doesn't render anything?

Thanks,
Wes

Cody Fauser wrote:
> Wes,
>
> Since the Ajax call in the background, you need to perform the
> redirect with JavaScript, so the easiest way would be for you to use
> inline RJS in your controller like follows:
>
> def target_list_add
>   render :update do |page|
>     page.redirect_to( :action => 'target_list_upload')
>   end
> end
>
> You'll need Edge Rails or the RJS plugin to do that, though.
>
> If you don't want to use RJS, you could do it the long way like this:
>
> def target_list_add
>   @headers['Content-Type'] = 'text/javascript'
>   render :text => "window.location.href =  '#{url_for(:action =>
> 'target_list_upload')}'"
> end
>
> On 3/20/06, Wes Gamble <weyus@att.net> wrote:
>> I know for certain that this line of code is being reached.
>> Rails@lists.rubyonrails.org
>> http://lists.rubyonrails.org/mailman/listinfo/rails
>>
>
>
> --
> Cody Fauser
> http://www.codyfauser.com
7cda78d70ab775710f6fa24e0a5b68db?d=identicon&s=25 Emin Hasanov (Guest)
on 2006-03-20 20:34
(Received via mailing list)
Wes, the root of the issue is that what you get back from your request
needs
to be processed by javascript to be actioned upon. You only get XML data
back and your browser will not process it unless told to do that. This
is
what Cody meant by "call in background".
Therefore, if you want to do a conditional redirect you need to analyze
received data and if it meets required cretirea do a javascript
redirect.
Eea7ad39737b0dbf3de38874e0a6c7d8?d=identicon&s=25 Justin Forder (Guest)
on 2006-03-21 04:24
(Received via mailing list)
Wes Gamble wrote:
> Is the root of my issue that there is no HTTP response to give back to
> the browser and that is why the Ajax.Request + controller redirect
> doesn't render anything?

The HTTP request was made by the XMLHTTP component (or equivalent), and
the XMLHTTP component handles the resulting HTTP response.

If the response specifies a redirect, it is the XMLHTTP component that
should be trying again at the redirect address - not the browser.

regards

   Justin
This topic is locked and can not be replied to.