code tunes

Web applications, software engineering, Ruby on Rails, Cake PHP, JavaScript, etc.

Rails 2.2.2, Ajax and respond_to

As I wrote some time ago in the article about Rails, Ajax and jQuery, sometimes there are problems with Rails not interpreting correctly content type headers of ajax requests. It’s because not all web browsers send that header in the same way. 

What I proposed was to sort the request.accepts array (array containing content type headers sent by browser) so that xml content type would be the first element. That would then trigger format.xml in our respond_to block.

However that approach does not work in Rails 2.2.2, because now the request.accepts array is frozen and it cannot be modified. I spent some time googling for the solution, but with no effect. So I dived into the API and Rails’ source code and came up with pretty nice and simple solution to the problem.

class ApplicationController < ActionController::Base
  before_filter :xhr_to_xml
 
  def xhr_to_xml
    request.format = :xml if request.xhr?
  end
end

This piece of code is an equivalent of the snippet I proposed in the article I referred to at the beginning. Now all ajax request will trigger format.xml in respond_to blocks.

Related posts

1 comment

Written by Michał Szajbe

January 31st, 2009 at 12:07 am

Tagged with ,

One Response to 'Rails 2.2.2, Ajax and respond_to'

Subscribe to comments with RSS

  1. Googling for the solution one month later brought me here. thanks :)

    michal

    6 Mar 09 at 23:58

Sorry, comments are closed for this post.