2008-11-24 119 views
0

我需要更新一對舊的經典asp頁面— a search.asp頁面,該頁面提供了一個簡單的表單,然後將其發佈到results.asp頁面。搜索頁面上的表單選項之一是「格式」的下拉列表(<select)。如果用戶選擇excel格式,結果頁面將Response.ContentType設置爲application/vnd.ms-excel,並添加一個content-disposition標頭來設置文件名並將其作爲附件。就是這樣:它能夠正確渲染html,並且通常做得非常好。下載完成時觸發javascript代碼

所有這些工作都很好,除了一件事。 Excel選項的原因在於,在這種情況下,用戶確實希望爲單個搜索查看多達10,000個項目甚至更多。他們將使用Excel對結果進行一些額外的分析。所以搜索操作通常需要一分多鐘,我無法改變這一點。

那一分鐘內的用戶體驗並不理想。用戶不僅僅坐在那裏幾乎沒有任何反饋,但通常有足夠的結果讓頁面溢出響應緩衝區。這意味着頁面必須定期刷新,因此文件立即開始下載,但下載管理器本身無法提供有意義的反饋。我的任務是改善這種狀況。

第一步是在表單提交時在搜索頁面上僅顯示一條簡單的processing...消息,我可以輕鬆地做到這一點。事實上,它已經爲「HTML」格式選項做了這個。問題是,當下載Excel文件時,我不知道如何告訴下載的任何內容,所以我可以再次隱藏該消息,現有的實現根本沒有提供任何關於下載進度的反饋。有任何想法嗎?如果我可以在下載完成時觸發一個JavaScript函數來觸發,我可以將任何東西都掛鉤,但我甚至無法完成此操作。

更新:
我重新提出了這個問題,試圖更清楚地提出問題。

回答

0

嗯,有可能通過ajax做到這一點嗎?即用戶選擇格式,通過ajax發送查詢,並將相應的文檔加載到search.asp中的iframe中。然後你可以在你的ajax調用中選擇成功的事件並適當地處理這些消息。

0

您可以通過添加標題將文件下載爲附件,以便用戶的瀏覽器保持運行狀態。我意識到這不完全是你要求的;但如果將其與用於HTML版本的插頁式廣告頁面結合使用,則可能會改善用戶體驗。

Response.AddHeader "Content-Disposition", "attachment; filename=report.xls" 

用戶會看到帶有處理圖形的插頁式頁面,然後該頁面會重新發布搜索表單。這將允許顯示「正在處理...」圖形,直到彈出的頁面出現Excel文件的下載提示。

更新:我試過使用iframe,讓頁面定期檢查文檔對象,並在「切換到Excel」時捕獲「界面不存在」錯誤,但仍然鎖定瀏覽器,而Excel文檔是在iframe中下載......我不認爲純粹的js解決方案會起作用。之後,我認爲追求的下一個最佳途徑是(不幸的是)Flash。祝你好運。

+0

將不起作用:看到我更新的問題。 – 2008-11-25 00:55:44

2

據我所知,瀏覽器並沒有提供任何有關下載進度如何的鉤子。理論上,你可以在服務器端做一些事情,並使用AJAX來查詢服務器,看看有多少下載已經發送,但我不知道該怎麼做。

+0

不,當然沒有簡單的鉤子:)如果這很容易,我已經解決了這個問題。我希望有人能夠解決這個問題。 – 2008-11-25 14:38:48

+0

另外:爲了使ajax工作,results.asp頁面必須支持它,而且它目前甚至沒有接近。 – 2008-11-25 15:05:23

0

我建議尋找修改您的上傳方法,以使用類似SWFUpload,它允許在代碼上的JavaScript回調。一旦文件上傳(假設您正在存儲它),我會考慮將文件名和類型傳遞到您的Results.asp頁面,然後它將從文件存儲中檢索它。它不如保存在你的問題中的記憶中一樣安全;但是,它將提供更好的用戶體驗,並可能提供您需要的回撥解決方案。

http://swfupload.org/

這裏是一個jQuery插件的例子,使得上傳過程和集成的SWFUpload容易: http://blog.codeville.net/2008/11/24/jquery-ajax-uploader-plugin-with-progress-bar/