Ruby on rails Rails 3远程表单:如何指定内容类型?
我使用的是Rails3.2,我有一个表单,我希望它通过ajax发布,并让控制器返回json 我使用表单_作为助手,如下所示:Ruby on rails Rails 3远程表单:如何指定内容类型?,ruby-on-rails,ajax,ruby-on-rails-3,forms,ujs,Ruby On Rails,Ajax,Ruby On Rails 3,Forms,Ujs,我使用的是Rails3.2,我有一个表单,我希望它通过ajax发布,并让控制器返回json 我使用表单_作为助手,如下所示: = form_for(@object, :remote => true, :format => :json) do |f| .... 我的对象控制器创建方法如下所示: def create respond_to do |format| if @object.save format.html { redirect_to
= form_for(@object, :remote => true, :format => :json) do |f|
....
我的对象控制器创建方法如下所示:
def create
respond_to do |format|
if @object.save
format.html { redirect_to @object }
format.json { render json: @object, status: :created, location: @object }
else
format.html { render action: "new" }
format.json { render json: @object.errors, status: :unprocessable_entity }
end
end
end
表单正在按预期提交。但是控制器返回的是html,而不是json
使用firebug检查请求,并确保ajax请求上的内容类型http头被设置为application/html
这方面的文档非常稀少,:format=>:json似乎只是将“.json”附加到表单操作中,而不是实际修改任何http头
我还尝试了:content\u type=>:json,但没有效果
我不能简单地硬编码控制器以返回json,因为我确实希望它在其他地方返回html
那么,有人知道如何告诉控制器在使用form_for时呈现json吗
感谢您的帮助您可以将内容类型设置为:=form_for(@object,:remote=>true,:html=>{:'data-type'=>'json'}) = form_for(@object, :remote => true, :html => {:'data-type' => 'json'})
如第106行所述。对于Rails 5,正确的方法是设置数据属性
数据:{type::json}
页面上的表单标记中呈现了什么url和方法?Post,完整的标记是:此处没有json。您是否考虑使用Realest.xHR?要区分ajax和普通请求,而不是请求的格式?好的,我们做了一个快速测试,现在看来这是一个解决方法。不确定它是否正确-格式和请求机制应该分开。如果我以后想添加另一个需要xml的ajax请求呢?谢谢!我知道我遗漏了一些明显的东西!:)在Rails 4中,您可以使用
format::json
(或:format=>:json
)代替Rails 3.2中的:html=>{:'data-type'=>'json'}
@JamesMcMahon。在我的情况下不起作用:(rails 4 form_for remote true不起作用,我在浏览器控制台资源中收到此错误,该错误被解释为脚本,但使用MIME类型text/html传输。实际上,响应是以html形式发送的,而不是以JS形式发送的,JS在ajax请求上设置dataType属性,而不是contentType。这会导致将Accepts标头更改为json,以便请求。但是,内容类型将保持不变。这有点沉重@DavyM。他只是想帮助我,实际上帮助我链接到UJS文档。