php
  • javascript
  • jquery
  • ajax
  • 2012-04-23 2 views 0 likes 
    0

    У меня есть индикатор состояния входа в систему на моей домашней странице базы данных ajax-php. Кнопка входа в систему при нажатии делает две вещи.функция индикатора состояния входа не работает

    <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, то он правильно обновит статус входа. Но я не знаю, как это сделать. Пожалуйста помоги!

    EDIT

    Когда я называю эту функцию в качестве обратного вызова, как то есть: logIntheUser (updateLoginStatusIndicator()), она до сих пор не не работает (может быть мой обратный вызов метода является неправильным). Затем, когда я добавляю set_time_limit(1); в скрипт функции updateLoginStatusIndicator(), чтобы задержать его в течение 1 секунды, он начинает работать, но это не самая лучшая практика для задержки сценария. Пожалуйста, помогите мне, как я могу работать без задержки, так что функция updateLoginStatusIndicator() выполняется только после завершения функции logIntheUser(). Пожалуйста помоги.

    +0

    попробовать сделать это без использования функции IsSet, иногда Исеть не работает в соответствии с настройками сервера переменных. –

    +0

    @RavinderSingh хм, это не работает так. Я думаю, это из-за времени выполнения функций. Это вторая функция 'updateLoginStatusIndicator' запускается после того, как первая функция' logIntheUser' будет выполнена полностью, тогда эта ошибка будет исправлена. Но я не знаю, как запустить первую функцию 'logIntheUser', сделать вторую функцию' updateLoginStatusIndicator' дождаться завершения первой функции и затем запустить ее. –

    +0

    просто верните некоторое значение из функции logInTheUser и вызовите функцию updateLoginStatusIndicator, когда эта функция вернет значение. –

    ответ

    1

    logIntheUser() выполняет запрос AJAX, не так ли? Тогда проблема с updateLoginStatusIndicator(), скорее всего, заключается в том, что если вызов вызывается сразу после logInTheUser(), то не после успешного завершения запроса AJAX. То есть, он может получить статус пользователя до его обновления. Вы должны вызвать updateLoginStatusIndicator() в обратных вызовах для запроса AJAX.

    +0

    абсолютно правый. –

    +0

    Спасибо за помощь. Вы имеете в виду, что я должен использовать logIntheUset (,, updateLoginStatusIndicator()) правильно? –

    +0

    @Exander Я назвал функцию обратным вызовом, например: logIntheUser (,, updateLoginStatusIndicator()), но все еще не работает (может быть, мой метод обратного вызова неверен). Затем я добавил set_time_limit (1); на первый скрипт функции, чтобы отложить его на 1 секунду. С задержкой его работа, но не самая лучшая практика для задержки сценария. Пожалуйста, помогите мне, как я могу работать с ней без промедления? –

    0

    Это, в большинстве случаев, происходит, когда в первой функции возникает ошибка. Убедитесь, что что-то может остановить выполнение скрипта.

    EDIT:

    Я предлагаю вам изменить ваш 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' работает нормально, потому что когда я обновляю страницу, пользователь успешно зарегистрирован. –

    +0

    Пожалуйста, проверьте изменение на мой вопрос, я добавил более подробную информацию. спасибо –

    1

    Просто вернуть некоторое значение из функции

     logInTheUser
    и вызовите функцию
     updateLoginStatusIndicator
    , когда эта функция возвращает значение

    +0

    Спасибо за помощь. –

    +0

    Пожалуйста, проверьте изменение в моем вопросе, я добавил более подробную информацию. спасибо –

    +0

    просто поместите все javascript-код в состояние, когда вы получите значение из первой функции, тогда будет выполняться только код ниже. –

    Смежные вопросы