登录状态指示灯功能不起作用

时间:2012-04-23 08:26:37

标签: php javascript jquery ajax

我的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*/);' />
  
      
  1. 它调用logIntheUser函数将登录数据发送到php访问   如果用户名和,则设置$_SESSION['username']的处理器文件   密码是正确的。
  2.   
  3. 它还会调用显示的updateLoginStatusIndicator函数   如果设置了$_SESSION['username'],则以$_SESSION['username']身份登录   如果未设置$_SESSION['username'],则显示“未登录”。
  4.   

以下是使用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仍然显示“未登录”。登录状态指示灯不起作用。可能是updateLoginStatusIndicatorlogIntheUser之后运行,然后它会正确更新登录状态。但我不知道该怎么做。请帮忙!

修改

当我将函数称为回调函数,例如:logIntheUser(updateLoginStatusIndicator())时,它仍然不起作用(可能是我的回调方法不正确)。然后,当我将set_time_limit(1);添加到updateLoginStatusIndicator()函数脚本以将其延迟1秒时,它开始工作,但这不是延迟脚本的最佳做法。请帮助我如何毫不拖延地工作,以便updateLoginStatusIndicator()函数仅在logIntheUser()函数执行完毕后执行。请帮忙。

3 个答案:

答案 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();
    }

}