【问题标题】:Rails redirecting after ajax call [duplicate]ajax调用后Rails重定向[重复]
【发布时间】:2012-11-22 18:46:38
【问题描述】:

所以在我的应用程序主页上,可以通过 ajax 请求调用各种操作。当用户登录时,可以进行这些调用。当用户未登录时,如果用户单击任何转到 ajax 调用的链接,我想将用户重定向到登录页面。

在我的 session_helper 中,我有一个方法在控制器中用作这些操作的 before_filter。

  def signed_in_user
    unless signed_in?
      store_location
      redirect_to signin_url, notice: "Please sign in."
    end
  end

但是重定向不适用于这些调用,因为调用是通过 ajax 进行的。 (作为记录,它确实适用于非 ajax 调用)例如:

<%= link_to new_picture_path, remote: true  do %>
  Add New
<% end %>

有没有办法让这个重定向通过 ajax 工作?我正在使用 rails v3.2.8 和 jquery。正如其他一些帖子所建议的那样,我尝试将以下方法添加到我的应用程序控制器中:

def redirect_to(options = {}, response_status = {})
  if request.xhr?
    render(:update) {|page| page.redirect_to(options)}
  else
    super(options, response_status)
  end
end

但我收到错误消息:“MissingTemplate 图片/更新”。而且我认为其他一些帖子表明这是因为我使用的是 jquery 而不是原型。任何帮助将不胜感激。

【问题讨论】:

    标签: jquery ruby-on-rails ajax redirect


    【解决方案1】:

    这不起作用,因为 ajax 调用将被重定向,但您的页面已经加载并且重定向不会影响它。

    删除自定义redirect_to,这对你没有帮助。

    您必须检查您的 ajax 调用是否返回 302,然后您可以使用带有 window.location 的 javascript 重定向用户。

    【讨论】:

      【解决方案2】:

      您可以在 JavaScript 代码中指定 document.location.href

      document.location.href = 'what/you/want';

      【讨论】:

        【解决方案3】:

        您可以创建隐藏段落并从控制器传递值,并通过js检查该p是否包含指定的单词,如果确实重定向到您想要的任何地方

        def signed_in_user
            unless signed_in?
              store_location
              @redirect = 'redirect'
            end
          end
        

        在你的 html.erb 中

        <p class='hide'><%= @redirect %> </p>
        

        在js文件中

        if ($('.hide').text() == 'redirect'){
        //do the thing
        }
        

        可能有点凌乱但有效的重定向方式

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-11
          • 2010-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多