我遇到了一个非常奇怪的问题与Rails和Ajax使用jQuery(虽然我不认为它是特定于jQuery)。Rails没有重新加载会话在AJAX后
我的Rails应用程序使用cookie会话存储,我有一个非常简单的登录,它在会话中设置用户标识。如果user_id未在会话中设置,则会重定向到登录页面。这工作没有问题。 JQuery GET请求也可以正常工作。问题是当我做jQuery POST时 - 浏览器发送会话cookie正常(我用Firebug确认了这一点,并将request.cookies转储到日志中),但会话是空白的,即会话是{}。
我在我的application.js这样做:
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr('content');
xhr.setRequestHeader('X-CSRF-Token', token);
});
,这里是我的样品后:
$.post('/test/1', { _method: 'delete' }, null, 'json');
应该得到这个控制器方法(_method:删除):
在日志def destroy
respond_to do |format|
format.json { render :json => { :destroyed => 'ok' }.to_json }
end
end
寻找和使用萤火虫,我可以确认正确的cookie值在请求他送当ajax文章发生时,但似乎在某些时候Rails失去了这个值,因此失去了会话,所以它重定向到登录页面并且永远不会到达该方法。
我已经试过了所有我能想到的调试方法,但是我想到了这可能是Rails中的一个错误。如果有帮助,我使用Rails 3.0.4和jQuery 1.5。我发现非常奇怪的是,定期(即非Ajax)获取和发布请求的工作,并且Ajax获取请求没有问题,它只是没有问题的ajax帖子。
任何试图解决这个问题的帮助将不胜感激!
非常感谢,
戴夫
此标签已被'csrf_meta_tags' – ChrisW 2016-01-28 10:00:50