2011-07-05 51 views
1

我有一個ASP頁面,可以進行一些後端處理。它調用一個存儲過程,如果過程完成,將返回一個狀態值。整個處理時間可以持續10-30秒左右,具體取決於輸入數據量。在等待時顯示加載內容/圖片

在這段時間內,我猜想顯示一個加載圖片或文本不僅僅是一個空白頁面會好得多。至少以這種方式,用戶知道她的請求正在處理中,只需要等待它完成。

我不知道我們如何能夠實現這與經典的ASP。有任何想法嗎?

非常感謝。

編輯:

嗯,我想有什麼東西我沒有解釋前面的很清楚。這裏的實際情況是:

我有2個ASP頁面,A.aspB.asp。用戶單擊A.asp上的一個按鈕,它會將表單提交給B.asp,並且B.asp是將調用後端存儲過程的處理頁面。當B.asp完成處理後,它會將用戶重定向到另一個頁面。

所以我遇到的問題是,無論何時用戶點擊A.asp的按鈕並獲取B.asp,只是一個空白頁,即使我已經有HTML代碼(顯示加載圖像)放置在非常B.asp開始(連接數據庫的asp代碼如下)。我不知道爲什麼它在加載時不顯示圖像。

+0

爲什麼不加載頁面,並讓用戶通過單擊按鈕觸發操作 - 這將通過AJAX發送請求到您的實際處理頁面 – JohnP

回答

1

當你說顯示加載消息時,我解釋你正在使用ajax。在ajax開始,您可以顯示該圖像,並且在ajax完成回調中,您可以隱藏加載圖像。請儘可能提供一些代碼示例。

在情況下,如果jQuery的AJAX,你可以使用:

$('#loaderImage').show(); 
$.ajax({ 
    // Other ajax parameters 
    success: function() { 
     // hiding the image here 
     $('#loaderImage').hide(); 
    } 
}); 
2

部分,我一直在使用應該讓你開始其解決的 -

CSS

#loading { 
    width: 100%; 
    height: 100%; 
    top: 0px; 
    left: 0px; 
    position: fixed; 
    display: block; 
    opacity: 0.7; 
    background-color: #000; 
    z-index: 99; 
    text-align: center; 
} 


HTML

<div id="loading"> 
    <img id="loading-image" src="images/ajax-loader.gif" alt="Loading..." /> 
</div> 


的JavaScript

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
<script language="javascript" type="text/javascript"> 
    $(window).load(function() { 
     $('#loading').hide(); 
    }); 
</script> 


在我的示例我使用的jQuery 1.4.4,而最新的也應該工作。

2

如前所述,我會推薦用Ajax來做這件事。然後,您可以更好地控制流量和用戶看到的內容。

但是 - 如果你真的想堅持傳統的ASP,一種方法是在加載整個頁面之前用Response.Write調用和Response.Flush調用來輸出「加載頁面」消息。

+1

這是可行的,但如果您向頁面輸出數據,您將不會之後能夠使用'Response.Redirect()',在開始長時間運行的處理之前,您還必須確保調用'Response.Flush()',否則用戶仍然看不到任何東西。 正如你已經寫入數據到頁面,你需要轉儲一個''加上一個通用的*,如果你沒有重定向X秒請點擊這裏*在數據庫處理完成後在頁面末尾鍵入消息 – RobV

+0

@RobV我已經嘗試了這個。但最終得到了一個錯誤消息,'響應對象錯誤'ASP 0156:80004005' 標頭錯誤 HTTP標頭已寫入客戶端瀏覽器。在編寫頁面內容之前,必須修改任何HTTP標頭。 ' – woodykiddy

+1

是的,您在寫入數據到頁面後無法**調用Response.Redirect(),您必須使用''重定向或其他基於Javascript的方法,而這正是我試圖解釋的我的評論 – RobV

0

我有一個類似的情況;我通過將工作分解爲兩部分來解決這個問題,並將所有耗時的工作都放到一個觸發每分鐘的計劃任務(只是一個WSC文件)中。我也可以創建一個服務,但這也起作用。

我的ASP文件創建了最初的記錄,有效地排隊工作要做的計劃任務來完成繁重的工作。我的計劃任務也是「自我意識」。如果最後一個在下一個觸發時仍在運行,它就會自行終止並等待原始結束。這樣就沒有重複處理的機會。

其結果是,即使有數百個同時發生的請求,服務器上的負載也幾乎爲零,並且最終用戶得到了即時反饋,告訴他們他們在處理訂單時會收到確認電子郵件,以及「確認」ID(創建初始記錄時的身份),因此每個人都有一個參考點,以防出現任何問題。