php
  • javascript
  • jquery
  • ajax
  • 2012-04-23 52 views 0 likes 
    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顯示「未登錄」。登錄狀態指示器不能正常工作。可能是updateLoginStatusIndicatorlogIntheUser之後運行,那麼它將正確更新登錄狀態。但我不知道該怎麼做。請幫忙!

    編輯

    當我調用該函數回調即像:logIntheUser(updateLoginStatusIndicator()),它仍然無法正常工作(可能是我的回調方法不正確)。然後,當我將set_time_limit(1);添加到updateLoginStatusIndicator()函數腳本中將其延遲1秒鐘時,它開始工作,但它不是推遲腳本的最佳做法。請幫助我,我該如何使用它,以便函數僅在logIntheUser()函數完成執行後才能執行。請幫忙。

    +0

    嘗試這樣做,而不使用isset功能,有時isset不根據變量的服務器設置工作。 – 2012-04-23 08:50:34

    +0

    @RavinderSingh嗯它的工作方式不行。我認爲這是由於功能執行的時間。它的第二個函數'updateLoginStatusIndicator'在完成第一個函數'logIntheUser'後運行,這個錯誤將被修復。但我不知道如何運行第一個函數'logIntheUser',使第二個函數'updateLoginStatusIndicator'等待第一個函數完成並運行它。 – 2012-04-23 09:00:46

    +0

    只是從logInTheUser函數返回一些值,並在此函數返回值時調用updateLoginStatusIndicator函數。 – 2012-04-23 09:24:23

    回答

    1

    logIntheUser ()執行AJAX請求,對嗎?然後updateLoginStatusIndicator()的問題很可能在於如果在logInTheUser()之後調用,而不是在AJAX請求成功完成之後調用。也就是說,它可能會在更新之前獲得用戶的狀態。您應該在AJAX請求的回調中調用updateLoginStatusIndicator()。

    +0

    絕對正確。 – 2012-04-23 09:26:33

    +0

    感謝您的幫助,您的意思是我必須使用logIntheUset(,, updateLoginStatusIndicator())對嗎? – 2012-04-24 03:41:48

    +0

    @Exander我把這個函數稱爲回調函數,例如:logIntheUser(,, updateLoginStatusIndicator()),但它仍然不起作用(可能是我的回調方法不正確)。然後我添加了set_time_limit(1);到第一個函數腳本將其延遲1秒。延遲其工作,但它不是推遲劇本的最佳做法。請幫助我,我該如何工作? – 2012-04-24 07:23:08

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

    第一個函數'logIntheUser'正常工作,因爲當我刷新頁面時,用戶登錄成功。 – 2012-04-23 09:02:13

    +0

    請檢查編輯我的問題,我已添加更多的細節。謝謝 – 2012-04-24 07:38:52

    1

    只返回從

     logInTheUser
    功能一定的價值,並調用
     updateLoginStatusIndicator
    功能時,該函數返回值

    +0

    感謝您的幫助。 – 2012-04-24 03:42:34

    +0

    請檢查編輯我的問題,我已添加更多的細節。謝謝 – 2012-04-24 07:39:21

    +0

    只是把所有的JavaScript代碼的條件,當你將從第一個函數的價值,那麼只有下面的代碼將執行.... – 2012-04-25 08:42:06

    相關問題