我的网站有登录系统,当点击标识为show
的链接时,如果会话未设置,我希望显示登录窗口。当会话设置时(登录后),我希望{strong}显示下拉菜单的show
链接。
如何通过PHP或JQuery或两者同时实现这一目标?另外,我不想重定向或刷新页面。
下面是我编写的代码但不起作用:
的index.php
<a href="" id = "show">SHOW</a>
//this is hidden
<div id="dropdown">
<a href="one.php">one</a>
<a href="two.php">two</a>
</div>
//this is hidden
<div id="loginWindow">
<p>please login</p>
....code
</div>
的login.php
<?php
ob_start();
session_start();
include_once('database.php');
if(isset($_SESSION['username'])){
echo '<script>',
'$(function(){ afterLoginIcon(); })',
'</script>';
}
if (!(isset($_SESSION['username']))){
echo '<script>',
'$(function(){ showpopup(); })',
'</script>';
}
else {echo "something went wrong"; return false;}
ob_end_flush();
?>
的script.js
$('#show').click(function (e) {
$.post( "loginIcon.php" );
return false; //to prevent refreshing the page
});
function showpopup()
{
$("#loginWindow").fadeIn();
$("#loginWindow").css({"visibility":"visible","display":"block"});
}
function afterLoginIcon() {
$("#dropdown").show();
}
编辑:我已将$.post( "loginIcon.php" );
更改为$('#show').load( 'loginIcon.php' );
并且它可以正常工作,但是,在控制台中,我收到警告说主线程上的同步XMLHttpRequest是因其对最终用户体验的不利影响而弃用。
答案 0 :(得分:0)
您可以只返回一个字符串&#34; 1&#34;而不是从PHP脚本返回javascript代码。如果用户已登录或&#34; 0&#34;如果用户不是
$('#show').click(function (e) {
$.post("login.php", function(data) {
if(data == "1"){
afterLoginIcon()
// user is logged in and menu should show
} else if(data == "0"){
// user not logged in and form should show
showPopup();
}
});
});
没有调用函数的原因是因为你从php脚本返回一个字符串作为响应而字符串不会作为javascript语句执行
php脚本将如下所示
<?php
ob_start();
session_start();
include_once('database.php');
if(isset($_SESSION['username'])){
echo '1';
} else {
echo '0';
}
ob_end_flush();
?>