我的ajax-php数据库主页上有一个登录状态指示器div。单击时的登录按钮会执行两项操作。
<input value="Login" type="button" onclick='logIntheUser(/*function to process login request*/);updateLoginStatusIndicator(/*function to update login status in login staus indicator div*/);' />
- 它调用
logIntheUser
函数将登录数据发送到php访问 如果用户名和,则设置$_SESSION['username']
的处理器文件 密码是正确的。- 它还会调用显示的
醇>updateLoginStatusIndicator
函数 如果设置了$_SESSION['username']
,则以$_SESSION['username']
身份登录 如果未设置$_SESSION['username']
,则显示“未登录”。
以下是使用updateLoginStatusIndicator
函数执行的控制器代码:
/*===login status indicator/updater===*/
if(isset($_REQUEST['change-login-indicator']))
{
if(!isset($_SESSION))
{
session_start();
}
if(isset($_SESSION['username']))
{
echo 'Logged in as:'.$_SESSION['username'];
}
else
{
echo 'not logged in';
}
现在的问题是用户有时成功登录(即$_SESSION['username']
已设置),但第二个函数updateLoginStatusIndicator
仍然显示“未登录”。登录状态指示灯不起作用。可能是updateLoginStatusIndicator
在logIntheUser
之后运行,然后它会正确更新登录状态。但我不知道该怎么做。请帮忙!
修改
当我将函数称为回调函数,例如:logIntheUser(updateLoginStatusIndicator())时,它仍然不起作用(可能是我的回调方法不正确)。然后,当我将set_time_limit(1);
添加到updateLoginStatusIndicator()
函数脚本以将其延迟1秒时,它开始工作,但这不是延迟脚本的最佳做法。请帮助我如何毫不拖延地工作,以便updateLoginStatusIndicator()
函数仅在logIntheUser()
函数执行完毕后执行。请帮忙。
答案 0 :(得分:1)
logIntheUser()执行一个AJAX请求,对吗?然后updateLoginStatusIndicator()的问题很可能在于,如果在logInTheUser()之后立即调用,而不是在AJAX请求成功完成之后调用。也就是说,它可以在用户更新之前获得用户的状态。您应该在AJAX请求的回调中调用updateLoginStatusIndicator()。
答案 1 :(得分:1)
只需从
logInTheUser函数返回一些值,并在此函数返回值
时调用
updateLoginStatusIndicator函数
答案 2 :(得分:0)
在大多数情况下,在第一个函数中发生错误时会发生这种情况。确保任何事情都可以停止执行脚本。
修改强>
我建议您使用onclick
事件的单函数回调修改HTML:
onclick="logInProcedure();"
在JS中:
function logIntheUser() {
/* Your code to process login */
/* set a boolean variable to true or false */
if(sucessfulyLoggedin) {
return true;
}
return false;
}
function updateLoginStatusIndicator() {
/* Your code here */
}
function loginProcedure() {
if(logIntheUser()) {
updateLoginStatusIndicator();
}
}