0

我的 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. 它还调用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()函数完成执行后执行。请帮忙。

4

3 回答 3

1

logIntheUser() 执行 AJAX 请求,对吗?那么 updateLoginStatusIndicator() 的问题很可能在于如果在 logInTheUser() 之后立即调用,而不是在 AJAX 请求成功完成之后调用。也就是说,它可能会在更新之前获取用户的状态。您应该在 AJAX 请求的回调中调用 updateLoginStatusIndicator()。

于 2012-04-23T09:22:30.307 回答
1

只需从

登录用户
函数并调用
更新登录状态指示器
此函数返回值时的函数

于 2012-04-23T09:25:49.747 回答
0

在大多数情况下,当第一个函数发生错误时会发生这种情况。确保任何东西都可以阻止脚本的执行。

编辑:

我建议您使用事件的单功能回调来修改您的 HTML onclick

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

}
于 2012-04-23T08:30:46.290 回答