Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3远程表单:如何指定内容类型?_Ruby On Rails_Ajax_Ruby On Rails 3_Forms_Ujs - Fatal编程技术网

Ruby on rails Rails 3远程表单:如何指定内容类型?

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

我使用的是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 @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文档。