2009-07-17 83 views
0

有沒有什麼機會在用經典asp創建循環的同時顯示加載欄?加載經典的asp吧

我想過一些ajax樣式的加載條,它顯示頁面是stil創建的東西。

我試圖用包含進程狀態信息的會話變量來做到這一點,但在此我發現asp服務器有一個隊列,這意味着您可以同時運行一個asp頁面。

在加載asp頁面時,我無法在同一會話的sam服務器上打開另一個asp頁面。新會議是可能的,但我想與同一會話(如果這是可能的話)。

想法: 可以通過ajax請求來完成,該請求會請求asp頁面並在頁面加載時顯示加載欄?

是否有任何解決方法來處理狀態欄?

(抱歉不好英語) 謝謝

編輯:

我這樣,但我不能在ASP頁的訪問會話變量。 會話閱讀器頁面在第一個asp請求完成後只給我一個答案。我認爲這是一個會話隊列思考。

它看起來像這樣對我說:

AJAX頁面 - (請求處理ASP頁) - > process.asp中

(相同AJAX頁面) - (請求會話讀者頁) - > sessionreader .asp的

而sessionstatus!= 100顯示下載進度條

的問題是,我得到了一個sessionreader.asp答案時process.asp中完成。這就是爲什麼我認爲這是一個ASP會話隊列思考。

也許它會工作,如果給第二個請求一個新的會話ID(如果這是可能的話)?

回答

1

曾經有一種伎倆要麼禁用Response.Buffer(將其設置爲false)或讓它被緩衝,但有時您會因爲想要更新進度而執行Response.Flush。

因此,假設你的頁面的頂部(圖片或表格或div或任何你想要的)的某個地方有你的進度條,並且你在asp腳本中做了一些事情(比如循環),不時,將JavaScript刷新回客戶端以更新應該已經在屏幕上的進度條。像這樣:

<% 
    REM Might be a good idea to set the timeout to some large number here... 
    Response.Timeout = ... 
%> 
<html> 
: 
<body> 
    <p>Please wait...<span id="progress">0</span>% completed.</p> 
    : content here... 
    <% 
    REM Make sure the things above this get sent to the client first 
    REM so they will be rendered before the rest of the page is rendered. 
    Response.Flush() 

    For iCnt = 0 To 100 
    REM Do some stuffs here... 

    %> 
    <script>$("#progress").html(i)</script> 
    <% 
    Response.Flush() 
    Next 
    %> 
    : some more contents here... 
</body> 
</html> 

我不確定這是否仍然適用於現代瀏覽器,有一段時間沒有使用它。

3

您可以在客戶端觸發GIF動畫,在您發送請求的那一刻。

+0

這不會顯示實時進度條。 – 2009-07-17 08:02:01

+1

沒錯。但大多數進度條並不是實時的。它們大多是「正在進行的行動,耐心」的跡象。雖然有一些例外,如基於Flash IMHO的GMail中的文件上傳。 – EFraim 2009-07-17 09:34:57

+0

+1一個合理的實用解決方案。 – AnthonyWJones 2009-07-17 15:35:35

0

只有一個asp頁面就無法做到這一點。你需要一個顯示給用戶的頁面(你在哪裏進度吧)。然後,您將需要在循環中對讀取會話對象的頁面進行ajax調用(使用jQuery?)。而且您需要一個實際正在處理的頁面,並將其狀態寫入由ajax調用定期監視的會話。您將需要定期與ajax進行通話,以便隨時檢查會話,直到您達到最終結果。如果這是一個非常漫長的過程,你可以在會話中存儲一個數字1-100,但是10,20,...,100可能效果最好。當你達到100時,你會打破循環,不再輪詢會話閱讀頁面。

原因是你需要一個頁面來顯示給你的酒吧的用戶。

正在進行處理的頁面在完成處理之前無法向用戶顯示任何內容。

簡單地讀取會話的頁面可以快速處理並快速顯示其結果。

有意義嗎?

0

您現在正處在正確的軌道上,問題在於您正在Windows XP上開發並遇到IIS 5一次只能處理一個請求的限制。
由於您懷疑在嘗試監視的原始請求完成之前,AJAX進度請求未返回。

我知道這個版本的IIS沒有辦法解決這個問題。這可能是另一個限制,以防止您在生產環境中使用XP IIS 5。即使第二個請求來自具有不同IP地址的另一臺機器,它也不會被處理,直到第一個完成。