使用下拉列表调用Ajax

时间:2015-05-18 11:46:21

标签: javascript jquery ruby-on-rails ajax

我试图关注this问题,但我被困住了。 在我的控制器中,我有:

 def index
    if params[:sort] == 'stars'
      @projects = [Project.first]
    else
      @projects = Project.all
    end

    respond_to do |format|
      format.html
      format.js { render 'populate_projects', :formats => [:js] }
    end
  end
路线中的

get '/inspire/:sort' => 'projects#index'

在视图中:

   = collection_select :project, :id, Project.all, :id, :name, {}, {:onchange => '$.get("/inspire/stars")'}
   %div#normal
    = render 'projects_list'
   %div#stars{ style: 'display: none' }

我的_projects_list.html.haml有:

  %div
    - @projects.each do |project|
      %div
        %p
         #more code...

最后在populate_projects.js.haml:

:plain
  $("#stars").html("#{escape_javascript render(partial: 'projects/projects_list')}");
  $("#normal").hide();
  $("#stars").show();

当我测试ajax调用是否正常时,该程序可能没有意义。然而,应该发生的是当我改变下拉状态时,必须进行一次ajax调用,这会调用“propulate.js.haml”。项目清单必须从全部变为第一,但不是。在我的终端中,我可以看到正在拨打电话但是“populate.js.haml”#39;永远不会呈现。有人可以帮忙!

2 个答案:

答案 0 :(得分:0)

确保您的Ajax调用请求JS格式:

= collection_select :project, :id, Project.all, :id, :name, {}, {:onchange => '$.get("/inspire/stars.js")'}

答案 1 :(得分:0)

如果你想进行ajax通话,你需要包括:

"data-remote" => true

有关详细信息,请参阅here