【问题标题】:Ajax call with dropdown list带有下拉列表的 Ajax 调用
【发布时间】:2015-05-19 00:25:30
【问题描述】:

我试图关注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”。有人可以帮忙吗!

【问题讨论】:

  • 可能是您的问题中的拼写错误,但您正在尝试渲染部分项目列表,但在问题中它是 project_list(项目单数)
  • 谢谢马库斯。是的,这只是问题。现已更正!
  • 你确定请求的是JS格式吗?也许你应该尝试:onchange => '$.get("/inspire/stars.js")' 来验证。
  • 是的!那完成了工作:D @sebastian 你想回答以便我可以接受吗?

标签: javascript jquery ruby-on-rails ajax


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果你想进行 ajax 调用,你需要包括:

    "data-remote" => true
    

    更多信息请参见here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 2018-12-31
      • 1970-01-01
      相关资源
      最近更新 更多