大家,早安,
我正在开发一个需要升级和重构的遗留 ASP Classic 应用程序。需要做出的最大改进之一是通过缓存数据库中的结果来加速应用程序。通过将它们缓存到 .dat 文件,我已经能够成功地做到这一点。这个应用程序遵循一个特定的路径,所以我在完成后一直在删除未使用的缓存文件。但是,在应用程序 (PV.asp) 的最终 .asp 页面上,文件在不应该被删除的时候被删除了。
我的意图是这样
<input type="button" value="Done" style="width: 56px; height: 40px" onclick="finish()" />
^ 这是“完成”按钮的代码,它调用了 finish() 函数。如下:
function finish() {
var size = "<%response.write(size) %>";
if (size == "0") {
var done = confirm("All Items mod, would you like to save?");
if (done == true)
{
if (window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
else
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
var concode = "<%=Replace(concode, "\", "\\" )%>";
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById('concode').value = concode;
document.forms["confirm"].submit();
}
}
<%if NOT rsTrxTy.EOF then
if rsTrxTy.fields("TYPE").value = "TO" then%>
~Stuff happens here~
<%end if
if rsTrxTy.fields("TYPE").value = "TI" then%>
~Stuff happens here~
<%end if
end if
if NOT rsOrdrs.EOF then%>
~Stuff happens here~
<%end if %>
<%
dim fso
Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.DeleteFile "C:\M\cache\rstrxis-" & Session.SessionID & ".dat"
fso.DeleteFile "C:\M\cache\rstrxos-" & Session.SessionID & ".dat"
fso.DeleteFile "C:\M\cache\rstrxty-" & Session.SessionID & ".dat"
fso.DeleteFile "C:\M\cache\rsords-" & Session.SessionID & ".dat" %>
}
}
else {
alert("All items have not been mod.");
}
}
当用户单击“完成”按钮时,对项目所做的更改将提交到数据库。我的意图是在执行此操作时,将删除缓存的文件。 但是,即使用户没有单击“完成”按钮,DeleteFile 命令也会运行。它在页面完成加载后运行。这会导致问题,因为页面将尝试从加载 PV.asp 时删除的缓存文件加载。 由于此应用程序几乎可以在不关闭窗口的情况下持续使用,因此会话 ID 将保持不变,这样就不会删除缓存的文件(因为当应用程序重新启动时,它将尝试加载已经存在的文件)缓存)。
我的问题是,为什么文件应该包含在仅在用户单击完成时才执行的 javascript 函数中时被删除?我在 ASP/Javascript 方面没有经验,因为这个项目是强加给我的,所以如果这是一个简单的问题,我很抱歉,但老实说我很难过。
注意—— 迁移到 ASP.Net 是不可能的。请不要建议这个。