javascript - Rails 在同一页面提交后显示信息

标签 javascript ruby-on-rails ruby ajax forms

我想在单击表单提交后显示一些值,但在同一页面中并且不刷新。

以我的形式

<%= simple_form_for :search, :url => url_for(:controller => "reports", :action => "search"), 
 :method => "get", :remote => true,:format => :js, 
 html: {id: "date_range", :"data-type" => "json"} do |f| %>
 <%= f.input :start_date, wrapper: :ranged_datetime,input_html: {id: "datetimepicker6"}, :label => "Fecha Inicio" %>
<%= f.input :end_date, wrapper: :ranged_datetime, input_html: {id: "datetimepicker7"} , :label => "Fecha Final" %>
 <%= f.submit 'Buscar', :class => "btn btn-success btn-lg" %>
<% end %>


<div class="datos">
<%= render :partial => 'reports/shared/sale_by_date' %>
</div>

在我的 sale_by_date.html.erb 中

<% unless @sales.nil? %>
    <% @sales.each do |sale| %>
      <tr class="<%= sale.remaining_balance == 0.00 && !sale.total_amount.blank? ? 'success' : '' %>">
        <td><%= sale.sale_by_vet %></td>
        <td><%= sale.created_at.strftime("%m/%d/%y %I:%M:%S %p")  %></td>
        <td><%= sale.customer.blank? ? '-' : sale.customer.last_name %></td>
        <td><%= number_to_currency sale.total_amount %></td>
        <td><%= number_to_currency sale.tax %></td>
        <td><%= number_to_currency sale.paid_total %></td>
        <td><%= sale.remaining_balance == 0.00 && sale.payments.count > 0 ? "Pagado" : "#{number_to_currency sale.remaining_balance}" %></td>
        <td><%= link_to 'Mostrar', edit_sale_path(sale) %> | <%= link_to 'Eliminar', sale, method: :delete, data: { confirm: '¿Esta seguro?' } %></td>
      </tr>
    <% end %>

创建.js.erb

$('.datos').html("<%= escape_javascript render(:file => 'reports/shared/_sale_by_date.html.erb') %>");

在我的 Controller 中

def search
    start_date = params[:search][:start_date]
    end_date = params[:search][:end_date]
    @sales = Sale.where(:created_at => start_date..end_date)
    respond_to do |format|
       format.js { ajax_refresh }
    end
end

def ajax_refresh
  return render(:file => 'reports/create.js.erb')
end

但是当我点击提交表单时,什么也没有发生。

控制台信息。

Started GET "/reports/search?  utf8=%E2%9C%93&search%5Bstart_date%5D=01%2F01%2F2015&search%5Bend_date%5D=06%2F03% 2F2015&commit=Buscar" for ::1 at 2015-06-03 10:00:44 -0500
Started GET "/reports/search?utf8=%E2%9C%93&search%5Bstart_date%5D=01%2F01%2F2015&search%5Bend_date%5D=06%2F03%2F2015&commit=Buscar" for ::1 at 2015-06-03 10:00:44 -0500
Processing by ReportsController#search as JSON
Processing by ReportsController#search as JSON
Parameters: {"utf8"=>"✓", "search"=>{"start_date"=>"01/01/2015",     "end_date"=>"06/03/2015"}, "commit"=>"Buscar"}
Parameters: {"utf8"=>"✓", "search"=>{"start_date"=>"01/01/2015", "end_date"=>"06/03/2015"}, "commit"=>"Buscar"}
[query values]
Rendered reports/shared/_sale_by_date.html.erb (65.5ms)
Rendered reports/shared/_sale_by_date.html.erb (65.5ms)
Rendered reports/create.js.erb (67.5ms)
Rendered reports/create.js.erb (67.5ms)
Completed 200 OK in 80ms (Views: 56.8ms | ActiveRecord: 16.0ms)
Completed 200 OK in 80ms (Views: 56.8ms | ActiveRecord: 16.0ms)

第一次提问,谢谢!!

最佳答案

当您发送 AJAX 请求时,Ruby 将自动查找同名的 .js.erb。因此,您可以将 create.js.erb 重命名为 search.js.erb 并删除 respond_to block 。此外, :"data-type"=> "json" 可能会导致响应被解释为 JSON 而不是 JS,因此不会执行。

关于javascript - Rails 在同一页面提交后显示信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30624536/

相关文章:

javascript - jquery mouseover动态p标签扩展

ruby-on-rails - 在不使用屏幕的情况下在后台运行 ruby​​ 脚本

ruby - 如何根据第三个变量值将 2 个变量设置为 1 或 0

javascript - for (var o in this) 在对象内部

javascript - 禁用div点击事件

javascript - webpack:找不到模块:错误:无法解析(使用相对路径)

c# - 使用 http 方将 json 发送到 web api

ruby-on-rails - rails : unknown attribute error for derived class

ruby-on-rails - Ruby on Rails 中的 Object.errors 不工作

ruby-on-rails - 如何使用 aws-s3 gem 或 right_aws gem 更改 S3 存储桶中所有文件的文件权限