2012-09-22 34 views
2

我必须完成的具体行动Rails的会话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调用指的创建操作后,该Ajax调用期间不会保存,所以我想保存表单的PARAMS在我的会话之前创建的。所以我把这个创建操作

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

我打印了会议,以确保从它包含正确的参数,可以和是的,这已经被印有正确的价值观服务器。

{"profile_id"=>"1000", "first_name"=>"john", "last_name"=>"vieira", "email"=> "[email protected]"} 

的这里的问题是,通话结束后,会议不会保存我已经存储!这意味着它这个任务之前存储的最新数据中的数据。我搜索了那个错误,我得知它可能是CSRF令牌错误,我通过添加beforeSend函数来修复它,但我仍然有同样的问题,所以有什么建议吗?

+0

你怎么确定会话没有正确存储? –

+0

@MikeCampbell在服务器控制台中打印会话,并且它看起来有正确的值 – Azzurrio

回答

0

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

您可以验证会话cookie与您的ajax请求一起发送吗?

+0

如何验证? – Azzurrio

+0

检查您的浏览器。在Chrome中,您应该可以查看开发人员工具中的“网络”标签。查看您的ajax请求中的请求和响应数据。 – foomip