在视图中重新加载控制器变量

时间:2013-07-24 19:05:03

标签: javascript ruby-on-rails ajax json ruby-on-rails-3.2

在我正在处理的rails应用程序中,我想刷新/重新加载我的控制器的索引方法而不刷新视图。例如,假设我将此作为我的索引:

def index
    @title =params[:title]   
end 

和html.erb:

<script>
function changeField() {
  var newTitle = "Alerts"
  $.ajax({
    url: 'index?title=' + newTitle,
    type: 'POST',
    contentType: 'application/json',
    data: '',
    dataType: 'script',
    headers: {
      'X-CSRF-Token': '<%= form_authenticity_token.to_s %>'
    },
  complete: function () {
    alert('<%=@title%>');
  }
  });
}
</script> 

<button type="button" onclick="changeField()"></button>

我遇到的问题是它没有重新加载视图上的@title变量,所以我得到原始标题而不是新标题。

1 个答案:

答案 0 :(得分:1)

当页面加载时,警告('&lt;%= @ title%&gt;')等于警报('第一个值'),设置新值后,无法重新加载javascript代码。如果你看html代码,你可以看到第一个值但不是第二个

我认为您可以将此代码添加到控制器

respond_to do |format|
  format.html # index.html.erb
  format.js { render :json { :title => params['title'] || @title }.to_json }
end

并添加到js代码success: function(data) { alert(data['title']) }