相关疑难解决方法(0)

Rails没有在ajax帖子上重新加载会话

我正在使用jQuery遇到一个非常奇怪的Rails和ajax问题(尽管我认为它不是特定于jQuery).

我的Rails应用程序使用cookie会话存储,我有一个非常简单的登录,在会话中设置用户ID.如果未在会话中设置user_id,则会重定向到登录页面.这没有问题.JQuery GET请求也可以正常工作.问题是当我做一个jQuery POST时 - 浏览器发送会话cookie ok(我用Firebug确认了这个并将request.cookies转储到日志中)但会话是空白的,即session是{}.

我在我的application.js中这样做:

$(document).ajaxSend(function(e, xhr, options) {
  var token = $("meta[name='csrf-token']").attr('content');
  xhr.setRequestHeader('X-CSRF-Token', token);
});
Run Code Online (Sandbox Code Playgroud)

这是我的样本帖子:

$.post('/test/1', { _method: 'delete' }, null, 'json');
Run Code Online (Sandbox Code Playgroud)

应该到达这个控制器方法(_method:delete):

def destroy
  respond_to do |format|
    format.json { render :json => { :destroyed => 'ok' }.to_json }
  end
end
Run Code Online (Sandbox Code Playgroud)

查看日志并使用Firebug我可以确认在ajax发布时在请求标头中发送了正确的cookie值,但似乎在某些时候Rails丢失了这个值并因此丢失了会话,因此它重定向到登录页面,永远不会到达方法.

我已经尝试了所有我能想到的东西来调试这个,但是我想到这可能是Rails中的一个错误.我正在使用Rails 3.0.4和jQuery 1.5,如果这有帮助的话.我发现定期(即非ajax)获取和发布请求工作非常奇怪,并且ajax获取请求工作没有问题,这只是ajax帖子没有.

任何帮助尝试解决这个问题将不胜感激!

非常感谢,
戴夫

ajax jquery ruby-on-rails

61
推荐指数
2
解决办法
2万
查看次数

标签 统计

ajax ×1

jquery ×1

ruby-on-rails ×1