【问题标题】:How to pass data from jQuery to controller?如何将数据从 jQuery 传递到控制器?
【发布时间】:2012-08-06 14:32:07
【问题描述】:

我有两个字段 - 结束和开始日期(日期范围),我应该将它们传递到控制器并重新加载此页面。

这是我的代码:

    <%= form_tag(:controller => "financial_reports", :action => 'index', :method => 'post') do%>//maybe this line should be edited
   <%= datepicker_input "report","start_date", :dateFormat => "dd/mm/yy" %>
  <%= datepicker_input "report", "end_date", :dateFormat => "dd/mm/yy"%>
  <%end%>

并生成 HTML():

  <form accept-charset="UTF-8" action="/financial_reports?method=post" method="post"...>
  <input id="report_start_date" name="report[start_date]" size="30" type="text" class="hasDatepicker"><script type="text/javascript">
<input id="report_end_date" name="report[end_date]" size="30" type="text" class="hasDatepicker"
    <input class="btn wide" id="btn-report" name="commit" type="submit" value="Run Report">
  </form>

我能得到这样的日期选择器值吗:

      $('#datepicker').datepicker({
    onSelect: function(dateText, inst) {
  $("input[name='report[start_date]']").val(dateText);
    }
});

我需要将它们传递给控制器​​并重新加载此页面,因为在此页面控制器中。

我需要在这里传递 JQUERY 值

    @financial_reports = current_user.financial_reports.where(:created_at => start_date.to_date..end_date.to_date)

或者我应该添加另一个动作或方法?你有什么建议?

【问题讨论】:

  • 您在这里遗漏了哪一块拼图?您是否只是在寻找一种在提交表单之前将数据传递给控制器​​的方法?
  • 是的。我应该重新加载页面以将数据传递给控制器​​吗?
  • 您可以使用 AJAX 将数据传递给控制器​​,这样他们就不必离开页面。或者,您可以使用 AJAX 传递数据,然后在尝试更新页面上的某些数据时在成功函数中重新加载页面。这取决于你,真的。你知道如何使用 AJAX 向控制器传递数据吗?
  • 不,我不熟悉它。也许我可以重新加载页面并传递数据?什么会更好?

标签: jquery ruby-on-rails view controller


【解决方案1】:

在我看来,使用 AJAX 而不是重新加载页面是最好的选择。您只是试图更新一些数据,没有理由执行整页刷新来做到这一点。我不是 RoR 爱好者,但似乎我们可以通过以下方式将数据发送到控制器 ->

$.ajax({ 
  type: 'POST', 
  url: 'path/to/controller', 
  data: {'start_date' : $("input[name='report[start_date]']").val(), 
        'end_date' : $("input[name='report[end_date]']").val() }, 
  success: function(data){
    //data is whatever you RETURN from your controller. 
    //an array, string, object...something 
  } 
});`  

在您的 RoR 控制器中,您将通过以下方式获取参数...

var the_start = params[:start_date],
    the_end = params[:end_date]

现在您已经在控制器中获得了数据,您可以将方法应用于它。然后,当您准备好发回数据时,return, print, whatever 您可以将数据发送到页面。

此外,默认情况下,RoR(访问控制器时)希望将模板输出到视图,因为我们只想更新数据,您需要使用类似 ->

的方式停止该默认操作
render :layout => false

我希望这会有所帮助。我真的不是 RoR 专家,但这是我在几次涉足时使用的方法。

祝你好运!

【讨论】:

    【解决方案2】:

    Rails 3 现在有帮手来做你想做的事。这些被称为远程表单和链接。

    This blog post 很好地解释了他们的工作和工作方式。

    【讨论】:

      猜你喜欢
      • 2020-05-29
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2021-06-14
      • 2017-03-23
      相关资源
      最近更新 更多