2

完成特定操作后我有这个 ajax 调用

  $.ajax({
              type: "POST",
              url: $("#myform").prop('action'),
              data: $("#myform").serialize(),
              xhrFields: {withCredentials: true},
              beforeSend: function(xhr) {
                xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').last().attr('content'));
              }
          });

这个 ajax 调用指的是创建操作,所以我想将表单的参数保存在我之前创建的会话中。所以我把它放在创建动作中

 def create
      session[:my_session].deep_merge!(params[:user])
      puts session[:my_session]

我打印会话以从服务器确保它包含正确的参数,是的,它已经打印了正确的值。

{"profile_id"=>"1000", "first_name"=>"john", "last_name"=>"vieira", "email"=> "john@sandsora.com"} 

这里的问题是在那个调用之后,会话没有保存我存储的数据!这意味着它存储了这个分配之前的最新数据。我搜索了那个错误,我发现它可能是 CSRF 令牌错误,我通过添加beforeSend函数修复了它,但我仍然有同样的问题,所以请给点建议?

4

1 回答 1

0

我的第一个猜测是没有设置会话 cookie 标头。如果没有此 cookie,rails 无法设置正确的会话,并且您的数据在请求完成后“丢失”。您的浏览器应该在您的 ajax 请求中自动发送它......

您能否验证会话 cookie 是否与您的 ajax 请求一起发送?

于 2012-09-22T16:49:24.183 回答