php
  • javascript
  • jquery
  • ajax
  • 2012-04-23 29 views 0 likes 
    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. これは、ユーザー名と パスワードが正しい場合$_SESSION['username']を設定するには、PHPのアクセス プロセッサフ​​ァイルへのログインデータを送信するためにlogIntheUser関数を呼び出します。
    2. また、呼び出した$_SESSION['username']場合 は$_SESSION['username']としてログイン表示updateLoginStatusIndicator機能は を設定したり、$_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は「ログインしていません」と表示します。ログインステータスインジケータは時間を計測しません。 updateLoginStatusIndicatorlogIntheUserの後に実行されている場合、ログイン状態を適切に更新します。しかし、私はそれを行う方法を知らない。助けてください!

    EDIT

    私はすなわちのようなコールバックとしての機能を呼び出す:(私のコールバックメソッドが間違っているかもしれない)logIntheUserは(updateLoginStatusIndicatorは())、それはまだ動作しませしませんが。その後、set_time_limit(1);updateLoginStatusIndicator()機能スクリプトに追加して1秒間遅延させると、動作し始めますが、スクリプトを遅らせるのはベストプラクティスではありません。どうすればいいのですか?updateLoginStatusIndicator()関数は、logIntheUser()関数の実行が終了した後にのみ実行されるように、どうすればいいですか。助けてください。

    +0

    時々ISSETは、変数のサーバーの設定に応じて動作しない、ISSET機能を使用せずにそれをやろうを返すとき

     updateLoginStatusIndicator
    関数を呼び出します。 –

    +0

    @RavinderSingh hmmそのように動作しません。私はそれが関数の実行のタイミングのためだと思います。最初の関数 'logIntheUser'が完全に実行された後に2番目の関数' updateLoginStatusIndicator'が実行されると、このエラーは修正されます。しかし、私は最初の関数 'logIntheUser'を実行する方法を知らないので、2番目の関数' updateLoginStatusIndicator'を最初の関数が完了するのを待ってから実行するようにします。 –

    +0

    は、logInTheUser関数から何らかの値を返し、この関数が値を返すときにupdateLoginStatusIndicator関数を呼び出します。 –

    答えて

    1

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

    +0

    絶対に正しい。 –

    +0

    助けてくれてありがとう、私はlogIntheUset(、updateLoginStatusIndicator())を使用する必要があるという意味ですか? –

    +0

    @Exander私は関数をコールバックのように呼び出しました。つまり、logIntheUser(,, updateLoginStatusIndicator())はまだ動作していません(コールバックメソッドが正しくない可能性があります)。次に、set_time_limit(1)を追加しました。最初の関数スクリプトに1秒間遅延させます。遅延を伴いながらスクリプトを遅らせるのはベストプラクティスではありません。遅くなく私はそれをどのように働かせることができますか? –

    0

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

    EDIT:

    私はあなたが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(); 
        } 
    
    } 
    
    +0

    最初の関数 'logIntheUser'は正常に動作しています。なぜなら、ユーザーが正常にログインしたページを更新するときです。 –

    +0

    私の質問に編集を確認してください、私は詳細を追加しました。ありがとう –

    1

    だけ

     logInTheUser
    関数からいくつかの値を返すと、この関数は値

    +0

    助けてくれてありがとう。 –

    +0

    私の質問に編集を確認してください、私は詳細を追加しました。ありがとう –

    +0

    ちょうどあなたが最初の関数から値を取得するときにそれの下のコードが実行されます条件ですべてのJavaScriptコードを置く.... –

    関連する問題