我的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()),它仍然不起作用(可能是我的回调方法不正确)。然后,当我向updateLoginStatusIndicator()
函数脚本添加set_time_limit(1);
以将其延迟 1 秒时,它开始工作,但延迟脚本不是最佳做法。请帮助我如何才能毫不拖延地使用它,以便updateLoginStatusIndicator()
函数仅在logIntheUser()
函数完成执行后执行。请帮忙。
logIntheUser() 执行 AJAX 请求,对吧?那么updateLoginStatusIndicator()的问题很可能在于,如果在logInTheUser()之后被调用,而不是在AJAX请求成功完成之后。也就是说,它可能会在更新之前获取用户的状态。您应该在 AJAX 请求的回调中调用 updateLoginStatusIndicator()。
只需从
logInTheUser函数返回一些值,并在该函数返回值时调用
updateLoginStatusIndicator函数
在大多数情况下,当第一个函数发生错误时,就会发生这种情况。确保任何内容都可以停止脚本的执行。
编辑:
我建议您在 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();
}
}