This may be the browser-dependency issue with recognition of accept
headers. I adapted a snippet that you can put in your
ApplicationController:
protected
def correct_safari_and_ie_accept_headers
ajax_request_types = ['text/javascript', 'application/json',
'text/xml']
request.accepts.sort!{ |x, y| ajax_request_types.include?
(y.to_s) ? 1 : -1 } if request.xhr?
end
What it does is sort the content types the browser claims to accept so
that the ajax'ey ones are first. That seems to fix a lot of this sort
of problem.
Attribution for original code: http://codetunes.com/
Hope this helps with your problem.
On Feb 21, 2009, at 8:48 PM, groovetrain wrote:
>
> For the life of me I can't figure this one out, although I can't find
> anyone else who's attempted to do this, and probably with good reason.
>
> Context: blog using AJAX
>
> What I'm trying to do: when the user initially saves a blog entry, or
> when auto-saving, I want subsequent saves to not create a new blog
> entry
>
> Why I can't just reload the partial:
> - That would interrupt the flow of blog-writing
> - I'm using FCKEditor, and it takes a few seconds to pop in place
> upon the reload of the partial (which is less than elegant)
>
> The solution that I came up with was to use the returned and evaluated
> javascript/jQuery to re-write parts of the form so that it would
> submit to my blog_entries controller and be treated correctly. So, I
> have to change the method from POST to PUT, which in rails means
> creating a hidden form element like so:
>
> <input type="hidden" name="_method" value="put" />
>
> and then changing the form action from
>
> action="/blog_entries"
> to
> action="/blog_entries/21" - or whatever the id is of the newly created
> blog entry
>
> There's also a little place in the onsubmit attribute that I'm also
> changing from /blog_entries to /blog_entries/21
>
> What's happening is it will submit, the updates will be successful,
> but my update method will always respond with format.html, not
> format.js, which is meaning I'm getting forwarded to my default
> scaffold "show" page, which greets me with a nice "Your blog entry was
> successfully updated."
>
> My update method looks like:
>
> def update
> @blog_entry = @user.blog_entries.find(params[:id])
>
> respond_to do |format|
> if @blog_entry.update_attributes(params[:blog_entry])
> flash[:notice] = 'Blog entry was successfully updated.'
> format.js { redirect_to(:action => 'success') } if
> request.xhr?
> format.html { redirect_to(@blog_entry) }
> format.xml { head :ok }
> else
> format.html { render :action => "edit" }
> format.xml { render :xml => @blog_entry.errors, :status
> => :unprocessable_entity }
> end
> end
> end
>
> I've checked the server console, and it is receiving the PUT method,
> and my blog entry is getting updated, but it doesn't make any sense to
> me why it is always being redirected, seemingly skipping over the
> format.js line every time. I've tried this line like this, and each
> of them yields the same thing:
>
> format.js { redirect_to(:action => 'success') }
> format.js if request.xhr? (with the appropriate update.js.rjs
> file in place)
> format.js
>
> If anyone could help me figure this one out it would be great! Sorry
> about the long post, I wanted to be clear what was going on.
>
> Groove
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---