php
  • javascript
  • jquery
  • ajax
  • 2012-04-23 41 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

    相关问题