根据登录状态更新DIV?

时间:2012-05-29 19:26:59

标签: javascript ruby-on-rails ajax devise

我目前在导航区域中有一个<ul>,其中包含一个<%= render :partial => "sessions/manager" %>,它基本上会调用另一个部分,具体取决于用户登录状态,可以呈现登录表单或欢迎声明。

我的登录部分由ajx提供支持,因此可以自动刷新。这是我正在使用的代码。

login.js

$(document).ready(function() {

  $('form#sign_in').bind('ajax:success', function(e, data, status, xhr) {
    console.log(data);
    if(data.success) {
      $('.user_nav').html(data.content);
    } else {
      $('.user_nav').prepend(data.errors.join('<br />'));
    }
  });

});

现在我希望我的页面上有另一个div,其中包含隐藏或显示的各种链接,具体取决于登录状态的用户。

目前我的代码就是这个。

<% if(signed_in?) %>
  <li><%= link_to "Clients", "/clients"  %></li>
  <li><%= link_to "Jobs", "/jobs"  %></li> 
<% else %>
<% end %>

但是,这并不像id那样有效。链接最初没有显示哪个很酷但是当我登录时链接不再显示...除非我进行整页刷新。

我怎么能ajax-ify这部分?

2 个答案:

答案 0 :(得分:1)


您的示例不起作用,因为服务器必须再次呈现页面以传递signed_in?

我建议摆脱ajax登录,只需正常提交并重新加载没有ajax的页面。 如果您仍想使用ajax,则可以使用javascript重新加载页面:

window.location.href=window.location.href

window.location.reload()

但是你也可以正常提交,一切都应该正常。

永远不要用css可见性做到这一点!它真的不安全,不是一个好的编程行为。服务器必须验证并向用户发送正确的html,具体取决于他是否已登录。

答案 1 :(得分:0)

使用CSS的Visibility属性,这样安全性较低,因为任何人都可以在源代码中看到链接,但会顺利运行。

如果在JSP中,请尝试通过该代码重新加载页面,如果看起来像登录,则表示正在进行中,同时您的页面将被刷新。