使用javascript从提交表单获取参数

时间:2014-09-14 08:41:03

标签: javascript jquery ruby-on-rails

我有这样的控制器

class HomesController < ApplicationController
  def index
  end

  def cheking
    @result = params[:type]

    respond_to do |format|
      format.js
    end
  end
end

并在index.html.erb

上表单
<%= form_tag(checking_path, :remote => true, :format => :js, :method => :get)   do %>
    <%= select_tag "type", options_for_select([ "admin", "customer" ], "admin") %>
    <%= submit_tag "check now" %>
<% end %>
<div id="result"></div>

checking.js.erb档案

$("#result").html("<%= escape_javascript(render("result")) %>");

我想将@result放入渲染文件_result.html.erb

<%= @result %>

但提交@result类型的表单时,admin不会出现在浏览器中。

日志:

Started GET "/checking?utf8=%E2%9C%93&type=admin&commit=check+now" for 127.0.0.1 at 2014-09-14 01:26:13 +0400
Processing by HomesController#checking as JS
  Parameters: {"utf8"=>"✓", "type"=>"admin", "commit"=>"check now"}
  Rendered homes/_result.html.erb (0.4ms)
  Rendered homes/checking.js.erb (1.1ms)
Completed 200 OK in 5.0ms (Views: 4.8ms | ActiveRecord: 0.0ms)

2 个答案:

答案 0 :(得分:1)

在您的checking.js.erb中,您需要传递变量,以便您的部分可以访问它 。你可以这样做:

$("#result").html("<%=j render partial: 'result', locals: {result: @result} %>");

,在您的部分内容中,您需要使用结果

#_result.html.erb
<%= result %>

答案 1 :(得分:1)

为了进一步@mandeep的努力,让我给你一些关于调试的想法

要调试此应用程序,需要考虑以下三点:

  
      
  1. 你的params是否击中你的控制器?
  2.   
  3. 您的数据是否正在被解析&amp;你的回答是否正确呈现?
  4.   
  5. 您的回复是否按要求开出?
  6.   

<强>调试

为了帮助您进行调试,您已向我们提供了一些很好的信息:

Started GET "/checking?utf8=%E2%9C%93&type=admin&commit=check+now"

非常好,因为这意味着你的:type param 应该设置(这将是这样的错误的主要关注点)。您可以使用以下方法进一步测试:

#app/controllers/homes_controller.rb
class HomesController < ApplicationController
   def checking
      Rails.logger.info params[:type]
   end
end

假设你的数据正在击中你的控制器,你要做的下一件事就是确保它被解析和放大。您的回答正确呈现。要做到这一点,你需要检查你的JS实际上是否被调用,以及它是否正在触发:

#app/views/homes/checking.js.erb
alert("Firing");
$("#result").html("<%=j render partial: 'result', locals: { render: @render } %>");

#app/views/homes/_render.html.erb
<%= render %>

当您向控制器发送请求时,上述应该触发警报。这将使您能够检查JS是否实际触发,您将能够看到问题所在。

最后,您会想要考虑您正在呼叫的响应。这种结构是否正确?可能是您的语法不正确,从而使您无法调用所需的功能。在这方面,上面的代码应该为你工作