我已为我的应用程序构建了一个上传程序,但在某些方面苦苦挣扎。
每隔3秒我的AJAX脚本调用我的ASP页面checkProgress.asp,检查上传过程中该文件夹中有多少文件,它还会检查是否有一个名为complete.txt的txt文件。
当计数完成后,它会将响应发送回AJAX脚本,例如“File 2 uploaded ...”,3秒后它将发送“File 3 uploaded ...”,依此类推。如果找到了complete.txt文件,它将返回“完成”而不是计数。这工作正常,一次,然后似乎没有正常执行。我得到了“完整”的消息,但没有得到文件计数进度响应。
我使用新的浏览器窗口手动运行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
答案 0 :(得分:1)
......继续发表评论。
所以这就是我理解它的方式。 Classic ASP为每个会话分配一个工作线程,因为Classic ASP对象是单线程的,因此在请求之间共享它们(存储在Session对象中)的唯一方法是为每个会话创建一个线程。当然,这意味着你所看到的 - 所有其他请求都被阻止,直到上传完成。
解决这个问题的方法是打破会议。不幸的是,会话cookie只是HTTP(出于安全原因),所以我认为没有办法从AJAX请求中删除它。
您可以让IIS条目响应另一个主机名,并将您的AJAX请求转换为JSONP请求到第二个主机名。我不确定是否有更优雅的方式来做到这一点。
==================
编辑:其实我收回有关cookie的部分。当然,您可以通过headers:{Cookie:""}
拨打ajax()
电话来杀死他们吗?值得一试......