设计使用rails 3和remote =>真正

时间:2011-03-28 14:05:15

标签: javascript jquery ruby-on-rails devise

使用带有AJAX登录的设计时遇到问题。我正在使用:remote => true选项和javascript版本的javascript助手(https://github.com/rails/jquery-ujs)。 用户输入正确的信息后,会在会话视图中呈现我的create.js.erb。这没关系,因为我可以在这个文件中使用JS重定向我的用户。但是当发生错误时,例如用户输入错误信息,只有闪存消息在响应中,错误代码为401 - Unauthorized。因此,不会呈现视图或create.js.erb或其他。 但是我希望通过在侧面显示它来处理这个消息,以便用户获得一些反馈,但是错误。

我还尝试使用respond_to :js实现自己的自定义控制器,并使用warden身份验证的:recall方法。但它不起作用。

有人知道解决这个问题的一些最佳做法吗?或者我应该避免使用这种辅助方法,只使用纯jQuery进行ajax调用吗?

THX, TUX

2 个答案:

答案 0 :(得分:9)

您可以在rails 3中使用jQuery事件“ajax:error”。只需将事件绑定到您的表单。

jQuery(function($) {
  $("#new_model").bind("ajax:error", function(event, data, status, xhr) {
    alert("something went wrong");
  });
});

请查看此blog post,详细了解可用的活动。

答案 1 :(得分:1)

这是我的版本

<script>
  $(document).ajaxError(function(e, XHR, options){
    if (XHR.status == 401){
      window.location.replace("<%= new_user_session_path %>");
    }
  });
</script>

它会自动将用户重定向到登录页面,并适用于页面上的所有元素。

相关问题