2012-09-22 48 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