0

私のコントローラーアクションでは、配列のセッションを初期化し、値を挿入します。これらの値はクライアント側からajaxを介して取得されるため、これらの値を配列に挿入するときにページが更新されることはありませんが、驚くべきことに、同じ定義済みセッションに挿入するのではなく、新しいセッションを初期化するたびに行われます。これが私のコードです

コントローラ

def receive_tags
  parser = Yajl::Parser.new
  @hash = parser.parse(request.body.read)
  log=Logger.new(STDOUT)
  log.error(@hash)
  session[:tags]||=[]
  session[:tags] << @hash["tag"]
    unless session[:tags].empty?
    log.error(session[:tags] ) #this keeps printing the current value i was expecting it to print a list of values including the previous
    end
  render :nothing=>true
 end

アヤックス

 var myobj={tag:"mytag"};
 $.ajax({
    url: 'ips/receive_tags',
    type: 'post',
    contentType: 'application/json; charset=UTF-8',
    accept: 'application/json',
    dataType: 'json',
    data:JSON.stringify(myobj),
    success: function(res) {
        if (res.ImportResponse !== void 0) {
            console.log('Success: ' + res);
        } else if (res.Fault !== void 0) {
            console.log('Fault: ' + res);
        }
    },
    error: function() {
        console.error('error!!!!');
    }
});
4

2 に答える 2

1

最後に私はそれを理解しました、問題は私がajax呼び出しを送信する前にトークンのリクエストヘッダーを設定していなかったので、Railsはトークンなしでデータを受信して​​いたので、それがすべてのリクエストの新しいオブジェクトであると仮定し続けました。。リクエストヘッダーを設定するには、

  beforeSend: function(xhr) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
 }

以下は私のajax関数です

var myobj={tag:"mytag"};
$.ajax({
url: 'ips/receive_tags',
type: 'post',
contentType: 'application/json; charset=UTF-8',
accept: 'application/json',
dataType: 'json',
data:JSON.stringify(myobj),
 beforeSend: function(xhr) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
 }
 success: function(res) {
    if (res.ImportResponse !== void 0) {
        console.log('Success: ' + res);
    } else if (res.Fault !== void 0) {
        console.log('Fault: ' + res);
    }
 },
 error: function() {
    console.error('error!!!!');
 }
});
于 2012-12-07T20:46:00.843 に答える
1

これは、ブラウザが Cookie を保存していないように聞こえます。これは、セッションが毎回再初期化される場所で見られる動作を説明しています。これを確認するには、次のことができます

print "Session ID: #{request.session_options[:id]}"

あなたのアクションで、リクエストごとにセッションIDが変化するかどうかを確認してください。含まれている場合は、ブラウザのプライバシー設定を確認し、Cookie が保存されているかどうかを確認してください。

于 2012-12-07T16:33:35.037 に答える