在ajax调用之后重新加载Rails 4页面

Pow*_*ter 5 javascript jquery ruby-on-rails-4

我有一个应用程序,它根据我存储在会话变量中的位置显示大量信息页面.

我在其他控制器的不同页面之间的部分共享中使用单个选择.

_location_select.html.erb

<%= select_tag(:location, options_for_select(Location.all.order('name ASC').collect { |l| [l.name, l.id] }, [session[:location]||'']), include_blank: true) %>
Run Code Online (Sandbox Code Playgroud)

这使得ajax调用:

locations_controller.rb

class LocationsController < ApplicationController
  def select
    session[:location] = params[:value]
    render js: ''
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我的coffescript:

home.js.coffee

$ ->
  $('#location').change ->
    $.get '/location/select', {value: $('option:selected', this).val()}
Run Code Online (Sandbox Code Playgroud)

所有这些代码都运行良好,但我需要在ajax调用完成后重新加载页面,让控制器返回更新的html太复杂了,因为位置选择将出现在如此大量的页面上.

我试过添加成功:和错误:回调函数到ajax调用,并且还使用了ajaxStop.我可以让ajax调用工作或页面重新加载工作,但无法找到获得两者的方法.

我试过添加:

$(document).ajaxStop(function(){
    window.location.reload();
});
Run Code Online (Sandbox Code Playgroud)

我在哪里放置location.reload()还是有更好的方法?

仅供参考,我在这个应用程序中没有使用turbolinks.

小智 13

locations_controller.rb

class LocationsController < ApplicationController
  def select
    session[:location] = params[:value]
    respond_to do |format|
        format.js   {}
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

意见/位置/ select.js

window.location.reload();
Run Code Online (Sandbox Code Playgroud)

  • 至少在rails 4中,我认为不需要respond_to块 - 如果select.js是views/locations文件夹中唯一的select.*视图文件,它将被自动拾取 (2认同)