1

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

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

登录.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 这个部分?

4

2 回答 2

1

您的示例不起作用,因为服务器必须再次呈现页面才能通过 signed_in?

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

window.location.href=window.location.href

或者

window.location.reload()

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

永远不要用 css 可见性这样做!这真的很不安全,也不是一个好的编程行为。服务器必须验证并将正确的 html 发送给用户,这取决于他是否登录。

于 2012-05-29T21:28:41.990 回答
0

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

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

于 2012-05-29T19:57:29.263 回答