When I try to hit this action via Javascript, I get a 406 Not Acceptable
error:
def show @annotation = Annotation.find_by_id(params[:id]) respond_to do |format| format.html { if @annotation.blank? redirect_to root_path else redirect_to inline_annotation_path(@annotation) end } format.js { if params[:format] == "raw" render :text => @annotation.body.to_s else render :text => @annotation.body.to_html end } end end
This is from jQuery, but I'm doing the right beforeSend stuff:
$.ajaxSetup({ beforeSend: function(xhr) { xhr.setRequestHeader("Accept", "text/javascript"); }, cache: false });
Here are my request headers:
Host localhost:3000 User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 Accept text/javascript Accept-Language en-us,en;q=0.5 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 300 Connection keep-alive X-Requested-With XMLHttpRequest Content-Type application/x-www-form-urlencoded
The HyperText Transfer Protocol (HTTP) 406 Not Acceptable client error response code indicates that the server cannot produce a response matching the list of acceptable values defined in the request's proactive content negotiation headers, and that the server is unwilling to supply a default representation.
A 406 Error – Not Acceptable will return if the file format is not supported by the server.
I cracked the case!
I was sending a format
parameter with my get request in order to tell the server to send me markdown instead of HTML. Here's my Javascript:
$.get("/annotations/" + annotation_id, {format: 'raw'}, function(data) { });
and then I was looking for this parameter in the format.js
block:
format.js { if params[:format] == "raw" render :text => @annotation.body.to_s else render :text => @annotation.body.to_html end }
but apparently a format
parameter confuses the respond_to
block. I changed it from {format: 'raw'}
to {markdown: 'true'}
and it works.
I guess this is a bug in Rails?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With