首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ajax / iFrame / FileSystemObject上传

Ajax / iFrame / FileSystemObject上传
EN

Stack Overflow用户
提问于 2012-01-22 11:34:05
回答 1查看 619关注 0票数 2

我已经为我的应用程序构建了一个上传器,但在某些方面遇到了困难。

每隔3秒,我的AJAX脚本就会调用我的ASP页面checkProgress.asp,检查上传过程中该文件夹中有多少个文件,它还会检查那里是否有一个名为complete.txt的txt文件。

计数完成后,它会向AJAX脚本发送一个类似于“File2 uploaded...”的响应。3秒后,它将发送“文件3已上传...”,依此类推。如果找到complete.txt文件,它将返回"Complete“,而不是计数。这一次运行得很好,之后似乎就不能正常运行了。我得到了应该得到的“完成”消息,但没有得到文件计数进度响应。

我用一个新的浏览器窗口手动运行checkProgress页面,以查看为什么我的进度面板没有随着进度更新,并注意到浏览器加载图标正在旋转,当上传完成时,“完成”弹出。因此,AJAX调用没有到达页面以收集文件计数,因为它很忙,这让我感到困惑,因为该页面所做的只是计算文件夹中有多少文件。

有人能建议我哪里做错了吗?当文件夹被添加到其中时,这是不会发生的吗?

下面是我的AJAX脚本。这在上传开始时开始:

代码语言:javascript
复制
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页面:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-22 13:24:49

来自评论的...continuing。

所以我是这样理解它的。Classic ASP为每个会话分配一个工作线程,因为Classic ASP对象是单线程的,因此在请求之间共享它们(存储在session对象中)的唯一方法是为每个会话分配一个线程。当然,这就是你所看到的--所有其他的请求都会被阻塞,直到上传完成。

解决这个问题的方法是中断会话。不幸的是,会话cookie是纯HTTP的(出于安全原因),所以我不认为有一种方法可以将它从AJAX请求中删除。

您可以使您的IIS条目响应另一个主机名,并将AJAX请求转换为对该第二个主机名的JSONP请求。我不确定是否有一种更优雅的方式。

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

编辑:实际上我收回了关于cookie的部分。你当然可以通过在你的ajax()调用中加入headers:{Cookie:""}来杀死他们?值得一试...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8958740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档