我的网站有登录系统,当点击带有 id show
的链接时,我希望它显示登录窗口,如果未设置会话。设置会话后(登录时),我希望show
链接显示下拉菜单。
如何通过PHP或JQuery或同时使用两者来实现这一点?另外,我不想重定向或刷新页面。
下面是我编写的代码,它不起作用:
索引.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>
登录.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();
?>
脚本.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已被弃用,因为它对最终用户的体验有不利影响。
不是从 php 脚本返回 javascript 代码,如果用户登录,您可以只返回字符串"1",如果用户未登录,则返回字符串"0"
$('#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();
?>