Javascript rails如何准确地响应工作?

Javascript rails如何准确地响应工作?,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我目前正在构建一个需要远程表单的应用程序,我突然意识到我从未真正理解rails如何响应的工作 例如,我在视图中有以下代码 <%= form_tag ..., :remote => true %> <%= submit_tag "submit" %> <% end %> 当按下表单的提交按钮时,这将执行\u home.js.erb中的javascript。但是,当按下提交按钮时,到底发生了什么?rails如何确切地知道是响应html还是javascrip

我目前正在构建一个需要远程表单的应用程序,我突然意识到我从未真正理解rails如何响应的工作

例如,我在视图中有以下代码

<%= form_tag ..., :remote => true %>
<%= submit_tag "submit" %>
<% end %>
当按下表单的提交按钮时,这将执行
\u home.js.erb
中的javascript。但是,当按下提交按钮时,到底发生了什么?rails如何确切地知道是响应html还是javascript


多谢各位

提交按钮发布带有特定标题/模拟设置的表单
respond\u to
根据请求的内容类型、动词和资源状态决定如何操作


有关详细信息,请参见此处:ActionController::Respondersubmit按钮使用特定的标题/MIME集发布表单
respond\u to
根据请求的内容类型、动词和资源状态决定如何操作

有关详细信息,请参见此处:ActionController::Responder如果标题指示该对象为

  • html
  • js
否则,将调用一个神奇的方法来调用作为响应类型名称的object.method(例如
csv

这要求将此类方法定义为响应类型的处理程序

如果标题指示对象的类型,则该对象呈现内容

  • html
  • js
否则,将调用一个神奇的方法来调用作为响应类型名称的object.method(例如
csv


这要求将此类方法定义为响应类型的处理程序

在选项散列中,
remote:true
请求Rails使用javascript响应

如果您有一个web检查器,您可以签出您的网络选项卡,提交表单,并且您可以在http请求头中看到post请求正在accept字段中请求javascript。如果选项散列中没有远程标记,则表单提交将请求html


此外,如果在项目目录中执行rake路由,您将看到几乎每个路由都以。:format关键字
/posts(:format)
结尾,这允许控制器响应用户可能在特定控制器中定义的多种格式

在选项散列中,
remote:true
请求Rails使用javascript响应

如果您有一个web检查器,您可以签出您的网络选项卡,提交表单,并且您可以在http请求头中看到post请求正在accept字段中请求javascript。如果选项散列中没有远程标记,则表单提交将请求html


此外,如果在项目目录中执行rake路由,您将看到几乎每个路由都以。:format关键字
/posts(:format)
结尾,这允许控制器响应用户可能在特定控制器中定义的多种格式

那么我可以在application.js中有效地执行类似的操作吗<代码>$(文档).ready(函数(){$('#提交')。on('click',…);})达到同样的效果?@Enzo这是一个令人困惑的问题。这是否意味着如果
:remote=>true
被删除或设置为false。然后“提交”按钮将发布带有标题/mime集的表单,该标题/mime集告诉响应者以HTML进行响应?@NewAlexandria我将在下面重新表述我的问题。。。谢谢你的指点!那么我可以在application.js中有效地执行类似的操作吗<代码>$(文档).ready(函数(){$('#提交')。on('click',…);})达到同样的效果?@Enzo这是一个令人困惑的问题。这是否意味着如果
:remote=>true
被删除或设置为false。然后“提交”按钮将发布带有标题/mime集的表单,该标题/mime集告诉响应者以HTML进行响应?@NewAlexandria我将在下面重新表述我的问题。。。谢谢你的指点!
def home
    # ...
    respond_to do |format|
        format.html
        format.js { render :partial => 'home' }
    end
end