Страница загрузки логина - PullRequest
3 голосов
/ 11 января 2012

У меня есть php-сайт, на котором у пользователя есть возможность авторизоваться.Как только они отправляют данные POST со своими учетными данными, они попадают на страницу, которая инициирует session и проверяет database.Этот процесс занимает много времени, прежде чем пользователь в конечном итоге перенаправляется на серверную часть сайта.В этот раз пользователь ступает на пустую белую страницу.Я хотел бы показать какую-то страницу загрузки, но когда на странице есть что-то, что можно распечатать, я получаю ошибку header из-за перенаправления.

Как мне создать страницу загрузки?Я понимаю, что ajax - это вариант, но это мой единственный вариант?

Обновление: Приложение PHP в основном занимает много времени, потому что каждый вход в систему зависит от внешнего API , который должен быть авторизован , а также взимается данные, которые необходимо запрашивать.Я не пытаюсь замаскировать то, что легко исправить, я пытаюсь создать лучший пользовательский интерфейс.

Процесс входа в систему занимает ~ 10 секунд.

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Что ж, простой способ справиться с этим заключается в следующем:

После того, как пользователь нажал кнопку входа, используя javascript, скрыл кнопку входа в систему, вставил ajaxloader gif , чем отправил AJAXзапросите учетные данные для входа в систему, введите его правильно, зарегистрируйте пользователя, отправьте ответ как JSON и перехватите этот ответ, а в случае успеха - сделайте перенаправление, в случае сбоя - напечатайте соответствующее сообщение.

someкод:

login-handler.php

$user = new user();
if ($user -> login($_POST['uid'], $_POST['password'], $_POST['whatever']){
  $response['type'] = 'success';
}
else{
  $response['type'] = 'failure';
} 
echo json_encode($response);

js-login.js

$("#login").click(function(){
  // verify that user put user name, password and whatever, hide button and show ajax loader

  $.get("login-handler.php", {user: user, password: password}, function(data){
    if (data.type == "success"){
      window.location = "http://example.com/new/location/whatever";
    }
    else{
      //print message
    }
  }, "JSON"); 
});

РЕДАКТИРОВАТЬ: но я хотел бы присоединиться к другим людям и рассмотретьиспользование более быстрого / другого API, поскольку 10-секундное время загрузки совершенно нелепо, если только это не для вас, в этом случае - вышибите себя.

2 голосов
/ 11 января 2012

Существует классический прием:

  • Установите цель формы входа в систему (невидимый) iframe, но в ней просто установите переменную для URL перенаправления
  • При отправке установите div с именем пользователя / паролем в .style.display = 'none', затем установите уже загруженный div "Please wait" в .style.display = 'block'
  • Когда iframe наконецзагружает с помощью document.getElementById ('myiframe'). contentWindow.VarName, чтобы получить URL-адрес и записать его в location.href
...