2012-01-10 83 views
3

我有一个用户有能力登录的PHP网站。一旦他们提交POST数据与他们的凭据,他们被带到一个页面,启动session并检查database。此过程需要很长时间才能将用户最终重定向到网站的后端。这次用户在空白的白页上爬楼梯。我想展示某种加载页面,但是当页面上有可打印的内容时,由于重定向,我得到一个header错误。登录加载页面

如何创建加载页面?我明白ajax是一种选择,但它是我唯一的选择吗?

更新: PHP应用程序主要是考虑了很久,因为每次登录依赖于外国API需要被授权以及充电数据需要被查询。我不是想掩饰我可以轻松修复的东西,而是尝试创建更好的用户界面。

登录过程大约需要10秒。

+1

听起来像你需要找出为什么它需要这么长的时间来加载而不是掩盖问题。 – 2012-01-10 22:41:10

+0

嗯'多久'多久?为什么不通过优化脚本来缩短时间? – zerkms 2012-01-10 22:41:15

+0

支票(含盐和所有)不应该花费那么长时间。使用FireBug并查看加载页面需要花费很长时间。 – Biotox 2012-01-10 22:47:31

回答

2

好了,简单的方法来处理这个问题如下:

一旦用户按下登录电子,使用JavaScript,隐藏登录按钮,适当注入一些 ajaxloader gif,比发送的登录凭据的AJAX请求,盐,它,将用户登录,以JSON的形式发布响应,并截取该响应,如果成功 - 重定向,失败 - 打印适当的消息。

一些代码:

登录-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

周围有这样的经典绝招:

  • 设置登录表单的(无形)iframe的目标,但它只是设置为重定向URL
  • 一个变量提交设置div将用户名/密码携带到.style.display ='none',然后将已加载的“请稍等”div设置为.style.display ='block'
  • iframe最终加载时使用document.getElementById('myiframe ').contentWindow.VarName获取URL并将其写入location.href