У меня возникла очень странная проблема с Rails и ajax с помощью jQuery (хотя я не думаю, что это специфично для jQuery).
Приложение My 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: delete):
def destroy
respond_to do |format|
format.json { render :json => { :destroyed => 'ok' }.to_json }
end
end
Глядя на журнал и используя Firebug, я могу подтвердить, что правильное значение cookie отправляется в заголовке запроса при возникновении сообщения ajax, но кажется, что в какой-то момент Rails теряет это значение и, следовательно, теряет сеанс, поэтому он перенаправляет на страницу входа в систему и никогда не попадает в этот метод.
Я пробовал все, что мог придумать, чтобы отладить это, но я прихожу к идее, что это может быть ошибка в Rails. Я использую Rails 3.0.4 и jQuery 1.5, если это помогает. Мне очень странно, что регулярные (т.е. Не-ajax) запросы get и post работают, а ajax получает запросы без проблем, это просто сообщения ajax, которые этого не делают.
Любая помощь в попытке исправить это будет очень признательна!
Большое спасибо,
Dave