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

这听起来像浏览器没有保存 cookie,这可以解释您在每次重新初始化会话时看到的行为。要确认这一点,您可以执行

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

在您的操作中,查看每个请求的会话 ID 是否更改。如果是,请检查您的浏览器隐私设置,看看它是否保存了任何 cookie。

于 2012-12-07T16:33:35.037 回答
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 回答