【问题标题】:How to show div based on Beaker session status with jQuery?如何使用 jQuery 基于 Beaker 会话状态显示 div?
【发布时间】:2013-11-23 13:33:30
【问题描述】:

内容通过 jQuery Ajax 加载到 main_content 区域。

main_content 区域之外是login 链接。

单击此链接会在main_content 区域中加载一个表单,该表单在提交时会使用 Beaker 执行登录授权。成功后,会在main_content 区域中加载管理页面。

我想在授权成功后将login 链接更改为logout 链接。

有没有办法根据烧杯中的会话状态显示/隐藏 div,例如:

if (beaker.session.id) {
    $('#login').hide();
    $('#logout').show();
}

我会在处理成功登录的 jQuery 块中调用它,然后在处理注销的块中交换 div。

编辑

在 Firebug 中,在登录 POST 响应中,我转到 "Cookies" > "Received Cookies" 并可以看到以下列表:

beaker.session.id

如果我在这个链接上右击,选择"Use in Command Line",命令行区会弹出如下:

$p

如果我随后在 Firebug 命令行区域中运行以下命令,我会弹出一个带有指定消息的警报:

if ($p) {alert("you have an id!")}

所以我尝试将其添加到处理登录的代码中,但我没有收到警报:

<script>
$(document).on("submit","#login", function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/login',
data: $(this).serialize(),
dataType: 'json',
success: function(results) {
$("#main_content").html("");
$("#main_content").append(results.content);
href = results.title;
history.pushState('', 'New URL: '+href, href);
reinit1();
reinit2();
reinit3();
if ($p) { // <-- here is the alert
alert("Yes you have an ID!")
}
}
});
});
</script>

我得到错误:

ReferenceError: $p is not defined

【问题讨论】:

  • 发布您的 ajax 部分并登录 html 代码

标签: jquery bottle beaker


【解决方案1】:

我找不到关于如何访问beaker.session.id cookie 的解决方案,所以我只是在登录成功时创建了一个jQuery cookie,然后创建了一个 if 语句,如果新创建的链接显示logout 链接登录存在(我将在注销时删除 cookie 以逆转该过程):

<script>
// login processing as shown above
reinit1();
reinit2();
reinit3();
$.cookie('logged-in', "YES", { path: '/'}); // set cookie and assign name and value
if ($.cookie('logged-in') == "YES") { //  check the value of the cookie
$('.login').hide();
$('.logout').show();
}
}
}
});
});
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2015-08-04
    • 2018-10-31
    • 2011-05-26
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多