从rails中的表单提交进行AJAX调用

时间:2018-05-30 16:03:30

标签: ruby-on-rails ruby ruby-on-rails-4

我正在使用rails 5.1,并在HomeController hello.html.erb中添加了一个表单:

<%= form_tag  do %>
    <label for="lookup">Lookup</label>
    <%= text_field_tag :lookup %>
    <%= submit_tag "Submit" %>
<% end %>

这是我的控制器:

class HomeController < ApplicationController
    require 'net/http'
    def hello
    end

    def bye
        uri = URI('...')
        puts response.body
        final_reply = response.body
    end
end

我想要做的是,当用户在hello.html.erb中提交表单时,它应该将:lookup文本字段发送到bye的{​​{1}}操作,然后HomeController操作会对网站进行API调用,然后获取回复,以便我将其作为JSON在bye中获取。

我希望此final_reply必须发送到final_reply操作,以便我可以在hello上显示此数据。

如何在AJAX中实现这一目标?

1 个答案:

答案 0 :(得分:0)

粗略地说,以下内容应该有效:

<%= form_tag home_bye_path do %>
  <label for="lookup">Lookup</label>
  <%= text_field_tag :lookup %>
  <%= submit_tag "Submit" %>
<% end %>

class HomeController < ApplicationController
  require 'net/http'

  def hello
    @final_reponse = params[:final_response]
  end

  def bye
    uri = URI('...')
    puts response.body
    redirect_to home_hello_path(final_reply: response.body)
  end
end

您可以使用rails routesdocs检查您的路线,以确定您应该使用home_bye_pathhome_hello_path的具体内容 - 而不会看到config/routes.rb我无法更准确。

这不会对任何请求使用AJAX - 就目前而言,最好将表单直接指向hello并处理那里的处理。或者将bye视为常规方法,并从hello调用它以收集所需的数据。

要使用AJAX,您可以将remote: true添加到form_tag,尽管这会返回您在页面上直接使用的响应,而不是传递给其他操作。

根据您的描述,我不确定AJAX是否合适,但如果我误解了,请添加更多细节并告诉我。

希望这会有所帮助 - 让我知道你是如何上场的。