0

ajax-php データベースのホームページにログイン ステータス インジケーター div があります。クリックされたログイン ボタンは 2 つのことを行います。

<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']、設定されている) ときがありますが、それでも 2 番目の機能updateLoginStatusIndicatorが「ログインしていません」と表示することです。ログイン ステータス インジケータは毎回機能しません。updateLoginStatusIndicatorの後に を実行すると、logIntheUserログイン ステータスが適切に更新される可能性があります。しかし、私はそれを行う方法がわかりません。助けてください!

編集

logIntheUser(updateLoginStatusIndicator()) のように関数をコールバックとして呼び出すと、まだ機能しません (コールバック メソッドが正しくない可能性があります)。次に、関数スクリプトに追加set_time_limit(1); してupdateLoginStatusIndicator()1 秒間遅延させると、機能し始めますが、スクリプトを遅延させるのはベスト プラクティスではありません。updateLoginStatusIndicator()関数の実行が終了した後にのみ関数が実行されるように、遅滞なく機能させる方法を教えてくださいlogIntheUser()。助けてください。

4

3 に答える 3

1

logIntheUser() は AJAX リクエストを実行しますよね? 次に、updateLoginStatusIndicator() の問題は、AJAX 要求が正常に終了した後ではなく、logInTheUser() の直後に呼び出されるという事実にある可能性が最も高いです。つまり、更新される前にユーザーのステータスを取得する場合があります。AJAX リクエストのコールバックで updateLoginStatusIndicator() を呼び出す必要があります。

于 2012-04-23T09:22:30.307 に答える
1

から値を返すだけです

ログインユーザー
関数を呼び出して
updateLoginStatusIndicator
この関数が値を返すときの関数

于 2012-04-23T09:25:49.747 に答える
0

これは、ほとんどの場合、最初の関数でエラーが発生したときに発生します。何かがスクリプトの実行を停止できることを確認してください。

編集:

onclickイベントで 1 つの関数のコールバックを使用して 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();
    }

}
于 2012-04-23T08:30:46.290 に答える