簡體   English   中英

下載完成后觸發javascript代碼

[英]Fire javascript code when download finishes

我需要更新一對舊的經典ASP頁面-一個search.asp頁面,該頁面提供了一個簡單的表單,然后將其發布到results.asp頁面。 搜索頁面上的表單選項之一是“格式”的下拉列表( <select )。 如果用戶選擇excel格式,則結果頁面僅將Response.ContentType設置為application/vnd.ms-excel並添加content-disposition標頭以設置文件名並將其作為附件。 就是這樣:excel才能正確呈現html,並且通常做得很好。

除了一件事,所有這些工作都很好。 使用Excel選項的原因是,在這種情況下,用戶確實確實希望一次搜索看到多達10,000個項目甚至更多。 他們將使用Excel對結果進行一些其他分析。 因此,搜索操作通常只需要一分鍾以上的時間,我無法更改。

在這一分鍾內,用戶體驗並不理想。 用戶不僅坐在那里幾乎沒有反饋,甚至沒有反饋,而且經常有足夠的結果使頁面溢出響應緩沖區。 這意味着頁面必須定期刷新,因此文件立即開始下載,但是下載管理器本身無法提供有意義的反饋。 我的任務是改善局勢。

第一步是在表單提交后在搜索頁面上顯示一個簡單的processing...消息,我可以很容易地做到這一點。 實際上,它已經針對“ HTML”格式選項進行了此操作。 問題是,在下載Excel文件時,我不知道如何告知下載內容,因此我可以再次隱藏該消息,並且現有實現完全不提供有關下載進度的任何反饋。 有任何想法嗎? 如果我可以在下載完成后啟動javascript函數,則可以對此進行幾乎所有的操作,但是我什至還不能這樣做。

更新:
我重新措詞以試圖更清楚地說明問題。

據我所知,瀏覽器沒有提供任何有關下載進度的信息。 從理論上講,您可以在服務器端執行某些操作,並使用AJAX查詢服務器以查看已發送了多少下載內容,但我不知道該怎么做。

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

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

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

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

更新:我嘗試使用iframe,讓頁面定期檢查文檔對象,並在切換到Excel時捕獲“接口不存在”錯誤,但是在iframe中下載Excel文檔時,它仍然鎖定了瀏覽器。我認為沒有一個純粹的js解決方案會起作用。 在那之后,我認為下一個最好的途徑是(不幸的是)Flash。 祝好運。

我建議您考慮修改您的上傳方法,以使用SWFUpload之類的方法,該方法允許對代碼進行JavaScript回調。 文件上載后(假設您正在存儲文件),我會考慮將文件名傳遞給您的Results.asp頁,然后在該頁中從文件存儲中檢索文件。 它不像將其保存在問題中那樣安全。 但是,它將提供更好的用戶體驗,並可能提供您需要的回調解決方案。

http://swfupload.org/

這是一個jQuery插件示例,可輕松完成上傳過程和SWFUpload集成: http : //blog.codeville.net/2008/11/24/jquery-ajax-uploader-plugin-with-progress-bar/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM