2012-01-10 92 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