簡體   English   中英

Ajax / iFrame / FileSystemObject上傳

[英]Ajax / iFrame / FileSystemObject Upload

我已經為我的應用程序構建了一個上傳器,但是在某些方面很掙扎。

我的AJAX腳本每隔3秒就會調用我的ASP頁面checkProgress.asp,以檢查上傳期間該文件夾中有多少文件,它還會檢查其中是否存在一個名為complete.txt的txt文件。

計數完成后,它會使用諸如“文件2上傳...”之類的內容將響應發送回AJAX腳本,三秒鍾后它將發送“文件3上傳...”,依此類推。 如果找到complete.txt文件,它將返回“ Complete”而不是計數。 一次,這個工作正常,然后似乎無法正常運行。 我得到應有的“完成”消息,但沒有得到文件計數進度響應。

我使用新的瀏覽器窗口手動運行checkProgress頁面,以查看為什么進度面板未隨進度更新,並注意到瀏覽器加載圖標只是在旋轉,並且上傳完成后,彈出“完成”。 因此,AJAX調用未到達頁面以收集文件計數,因為它很忙,這使我感到困惑,因為該頁面所做的所有事情都是在計算一個文件夾中有多少個文件。

有人可以建議我做錯了嗎? 在添加該文件夾的過程中,這僅僅是不會發生嗎?

這是我的AJAX腳本。 這開始於上載開始時:

var upload1ProgressCheckInt = setInterval(function() {
    var postData = "token="+token;
    $.ajaxSetup ({ cache: false });

    $.ajax({ type : 'GET', url : 'ajax/checkProgress.asp',
    dataType : 'html', data : postData,
    success : function(data) {
        if (data == "Failed") {
            $('#upload1ProgressStatus').html('Error: Upload cancelled!');
            clearInterval(upload1ProgressCheckInt);
            // do stuff
        } else if (data == "Complete") {
            $('#upload1ProgressStatus').html('Success: Files uploaded');
            clearInterval(upload1ProgressCheckInt);
            // do stuff
        } else {
            $('#upload1ProgressStatus').html(data);
        }
    }
    }); // end ajax
}, 3000);

這是checkProgress.asp頁:

Set FSO = Server.CreateObject("Scripting.FileSystemObject")
If (FSO.FileExists(Server.MapPath("../files/photos/"&token_&"/complete.txt"))) = True Then
    Response.Write "Complete"
Else
    Set folder = FSO.GetFolder(Server.MapPath("../files/photos/"&token_&"/"))
    Set files = folder.Files
    fileCounter = files.Count
    Response.Write "File "&fileCounter&" uploaded..."
End If

...繼續評論

所以這就是我的理解。 Classic ASP為每個會話分配一個工作線程,因為Classic ASP對象是單線程的,因此在請求之間共享它們(存儲在Session對象中)的唯一方法是每個會話都具有一個線程。 自然,這完全意味着您所看到的內容-所有其他請求都將被阻止,直到上傳完成。

解決該問題的方法是退出會議。 不幸的是,會話cookie僅限於HTTP(出於安全原因),因此我認為沒有辦法將其從AJAX請求中刪除。

您可以使IIS條目響應另一個主機名,然后將AJAX請求轉換為該第二個主機名的JSONP請求。 我不確定是否有更優雅的方法。

==================

編輯:實際上,我收回了有關cookie的部分。 您肯定可以通過給ajax()調用加上headers:{Cookie:""}來殺死它們? 值得一試....

暫無
暫無

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

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