Rails 3.2.8应用程序中的AJAX不会重新加载目标div

时间:2012-12-15 22:58:45

标签: jquery ruby-on-rails-3.2

在我的布局文件中,我有两个下拉菜单。当在一个(类别)中进行选择时,需要更新第二个(项目)的内容。

布局文件中的

<div id="pull_down_items" class="pull-right">
    <%= render :partial => 'layouts/pull_down_items' %>
</div>
<%= render :partial => 'layouts/pull_down_category' %>

布局/ _pull_down_items.html.erb:

<%= select_tag "current_item", options_from_collection_for_select(current_category.items, "id", "item_name", session[:current_item]), :id=>"change_current_item", :remote => true %>

布局/ _pull_down_category.html.erb:

<%= select_tag "current_category", options_from_collection_for_select(categories, "id", "category_name", session[:current_category]), :id=>"change_current_category", :remote => true %>

application.js中的jQuery:

$("#change_current_category").change(function() {
  var category_id = $(this).val();
  var url = "/system/" + category_id + "/change_category";
  $.post(url, category_id, function(html) {
  });
});

在我的system_controller中:

  def change_category
    unless params["id"].blank?
      session[:current_category] = params["id"].to_i
      current_category.reload # this is a method in application_controller.rb
    end
    respond_to do |format|
      format.js
    end
  end
在change_team.js.erb中

$("#pull_down_items").html("<%= render :partial => 'layouts/pull_down_items' %>")

结果:会话[:current_category]已更改为正确的类别。项目下拉菜单div不会重新加载。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

默认情况下,jQuery.post无法保证执行下载的内容。尝试将dataType参数设置为'script',如http://api.jquery.com/jQuery.post/

所示
  

“script”:将响应评估为JavaScript并将其作为纯文本返回。通过将查询字符串参数“_ = [TIMESTAMP]”附加到URL来禁用缓存,除非缓存选项设置为true。注意:这会将POST转换为GET以获取远程域请求。