当我尝试通过Javascript尝试此操作时,出现406 Not Acceptable
错误:
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
Run Code Online (Sandbox Code Playgroud)
这是来自jQuery,但我在发送之前做的正确:
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript");
},
cache: false
});
Run Code Online (Sandbox Code Playgroud)
这是我的请求标题:
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
Run Code Online (Sandbox Code Playgroud)
Tom*_*man 30
我破了这个案子!
我正在format
使用我的get请求发送一个参数,以告诉服务器向我发送markdown而不是HTML.这是我的Javascript:
$.get("/annotations/" + annotation_id, {format: 'raw'}, function(data) {
});
Run Code Online (Sandbox Code Playgroud)
然后我在format.js
块中寻找这个参数:
format.js {
if params[:format] == "raw"
render :text => @annotation.body.to_s
else
render :text => @annotation.body.to_html
end
}
Run Code Online (Sandbox Code Playgroud)
但显然一个format
参数会混淆respond_to
块.我从改变它{format: 'raw'}
来{markdown: 'true'}
和它的作品.
我想这是Rails中的一个错误?
当使用HTTPRiot从iPhone应用程序连接到JSON渲染Web应用程序时,这种情况发生在我身上.似乎问题是由于Rails期望Accept
HTTP标头很好,很舒服.因此,我使用Firefox的LiveHTTPHeaders扩展来查看没有406的头文件.在任何情况下,有效的Accept字符串是:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)
我要研究的另一个领域是产生JSON的控制器.如果控制器缺少一个format指令来指定它可以返回JSON作为响应,那么也可能导致406错误.
归档时间: |
|
查看次数: |
41960 次 |
最近记录: |