大家早上好,ASP經典刪除緩存文件後,用戶點擊「完成」按鈕
我上需要一些升級和重構的傳統ASP經典應用程序的工作。需要做出的最大改進之一是通過緩存數據庫結果來加速應用程序。這我已經能夠成功地將它們緩存到.dat文件。這個應用程序遵循特定的路徑,所以我在完成它們之後一直刪除未使用的緩存文件。但是,在應用程序(PV.asp)的最後一個.asp頁面上,文件在不應該被刪除時會被刪除。
我的目的是這個,
<input type="button" value="Done" style="width: 56px; height: 40px" onclick="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是出了問題。請不要提出這個建議。
這很有道理。我感覺這是ASP的一個屬性,但我找不到任何明確的信息。那麼,我將如何完成我的原創設計?我唯一的想法是將用戶發送到執行「清理」操作的新的.asp頁面,例如刪除緩存。你怎麼看? – ScruffMcGruff
增加了一些更多信息。基本上,使用ajax請求到一個新的ASP頁面,其中頁面實際上沒有內容,但是執行了你需要的DeleteFile命令。 –
很好的回答,相當於<% and %>標籤的陷阱。 – TelJanini