2012-01-19 78 views
0

我想知道如果我的解決方案接收上傳的進度指示可行,而且如果可能的話,我會以正確的方式開展工作嗎?它不一定非常準確,我只想要一個比旋轉的動畫圖標更多的東西。jQuery/ASP - 使用Cookie上傳進度

1)在上傳表單頁面////////

Submit upload form & files to processing page. 

2)在處理頁面/////////

For Each file In myFileArray Then 
    ' Save the file 
    ' Add 1 to a cookie called progressReport 
Next 

3)在載表單頁面///////

checkTimer = window.setInterval(function() { 
    var cookieContents = $.cookie('progressReport'); 
    if (cookieContents != "") 
    $('#uploadProgress').html(cookieContents + ' files uploaded'); 
}, 2000); 

---- ---- UPDATE

感謝下面的回答,我無法完成此操作,因爲在頁面完成處理之前cookie不會被寫入 - 這意味着用戶在完成之前不會收到任何反饋。無用!

我改變了我的計劃。這適合我的應用程序,可能不適合一些。

1)對服務器頁面進行AJAX調用,創建一個唯一的ID和一個名爲'unique ID'的文件夾。完成後,將ID作爲響應發回,在上傳表單中爲隱藏輸入添加唯一ID。

2)用戶提交文件,檢查ID存在隱藏輸入,然後發佈到隱藏的iFrame。提交時,每1-5秒鐘對另一個服務器頁面進行AJAX調用,檢查該文件夾中有多少個文件,將數量作爲響應發送回來,更新進度面板。

+1

這怎麼可能與asp.net _and_ asp-classic有關? – cdeszaq

+0

@cdeszaq - 因爲你可以保存一個文件並在asp.net中寫入一個cookie,所以寫asp.net的人可能知道這是否可行,並且應該理解上面的代碼示例。不要成爲這樣的失敗者! – TheCarver

+0

不能相信我因爲糟糕的標籤而被拒絕投票。爲什麼你不使用你的特殊權力和編輯問題,刪除標籤! – TheCarver

回答

1

它不會起作用,因爲這樣的:

For Each file In myFileArray Then 
    ' Save the file 
    ' Add 1 to a cookie called progressReport 
Next 

不會寫入cookie的瀏覽器,直到所有的文件都完成了。

您需要設計一種方法,從客戶端開始逐個上傳這些文件。您的處理頁面只收到一個文件;遞增cookie中的值並完成響應。換句話說,你的處理頁面最終被n次調用n個文件。您的JavaScript代碼每2秒鐘不斷讀取cookie,並顯示最後一次響應更新的值。

1

這是可能的,但使用cookie是一種奇怪的做法。如果進度存儲在服務器端,那麼您應該通過ajax請求更新客戶端。使用cookie肯定是可行的,但似乎沒有必要。例如,如果您希望客戶端在某個請求(例如第一階段,第二階段,第二階段)完成時更新,那麼您應該查看「長輪詢」作爲替代方案。或某些推送系統。

對於上傳文件,您可以找到一些如何顯示進度的示例。如果你願意,HTML5已經修改了XMLHttpRequest Level 2,以便更容易管理上傳進度等事情。