Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails ajax post不保存会话变量_Ruby On Rails_Ajax_Session - Fatal编程技术网

Ruby on rails rails ajax post不保存会话变量

Ruby on rails rails ajax post不保存会话变量,ruby-on-rails,ajax,session,Ruby On Rails,Ajax,Session,控制器在响应ajax请求时未更新会话参数。我花了一个小时在这上面,仍然不知道为什么会发生这种情况。我是否错过了关于ajax的一些非常重要的东西 Crontroller日志被命中并更改会话变量 def update if params["commit"] == "Generate Validation Code" Rails.logger.info "session before: #{session[:last_validation]}" session[:last_validatio

控制器在响应ajax请求时未更新会话参数。我花了一个小时在这上面,仍然不知道为什么会发生这种情况。我是否错过了关于ajax的一些非常重要的东西

Crontroller日志被命中并更改会话变量

def update
 if params["commit"] == "Generate Validation Code"
  Rails.logger.info "session before: #{session[:last_validation]}"
  session[:last_validation] = Time.now.to_i
  Rails.logger.info "session after: #{session[:last_validation]}"
 end
end
非ajax请求-会话变量已正确更新和保存

<%= form_for @ignindex do |t| %>
  <%= t.submit "Generate Validation Code", class: "btn btn-large btn-primary" %>
<% end %>

我自己也在为同样的问题挣扎(1年后)。我确信这与会话/cookie的往返以及它没有发生(或可能被覆盖)这一事实有关。如果我在
success
回调中添加重定向(
window.location=/where/else
),它将更新
会话[]
。但是,如果您不想重定向,这并没有特别大的帮助。解决方案是在rails:p中使用不引人注目的javascript。另外,控制器希望使用
表单\u为
生成一个csrf令牌,但在ajax PUT中丢失了,我自己也在为同样的问题苦苦挣扎(1年后)。我确信这与会话/cookie的往返以及它没有发生(或可能被覆盖)这一事实有关。如果我在
成功
回调中添加重定向(
window.location=/where/else
),它将更新
会话[]
。但是,如果您不想重定向,这并不是特别有帮助。解决方案是在rails:p中使用不引人注目的javascript。此外,控制器还需要一个csrf令牌,该令牌使用
表单\u为
生成,但在ajax put中丢失
$.ajax({
 url: "/ignindices/" + $("#ign").data("id"),
 type: "PUT",
 data: {"commit" : "Generate Validation Code" },
 dataType: "json",
 success: function(data) {
    console.log("it submitted!");
   }
 });