2011-10-05 72 views
0

我目前首次學習AJAX,與經典ASP混合使用。AJAX/ASP - 更新進度面板 - Response.Flush

我有一個AJAX腳本,調用我的ASP頁面(process.asp)。在ASP文件中是一個1到1000之間的簡單循環,它描繪了我的網站中其他地方的圖像處理,我想在後面添加AJAX。

AJAX腳本

function processItems() 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
{ 
xmlhttp=new XMLHttpRequest(); 
} 
else 
{ 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() 
{ 
if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
document.getElementById("notification").innerHTML=xmlhttp.responseText; 
} 
} 
xmlhttp.open("GET","processItems.asp",true); 
xmlhttp.send(); 
} 

ASP頁

Response.Expires = -1 
i = 0 
Do Until i = 1000 
i = i + 1 
Loop 
Response.Write "Process complete" 

在它工作正常的那一刻,當進程已經完成了它寫一條消息給用戶 「過程完成」。 ..但是,因爲有很多項目需要處理,我想告訴我的用戶哪個項目正在處理中,例如「處理項目17的1000」。

我讀過,我需要「Response.Flush」來執行這項任務,所以......

我可以用「.flush」在我的ASP腳本的環部,顯示出項目數量(一世)?如果是的話,我還需要別的嗎?如果不是,有人可以解釋我需要做些什麼才能使其工作?

這是我的想法是:

Response.Buffer = True 
Response.Expires = -1 
i = 0 
total = 1000 
Do Until i = total 
i = i + 1 
Response.Write "Processing Item "&i&" of "&total&"" 
Response.Flush 
Loop 

很多感謝

回答

1

它不可能得到你想要的。你的ajax調用一旦完成就返回一個響應,如果你有10000個文件要處理,你會在最後一個文件的處理結束後得到響應。

你可以改變你的形式給出,通過反向AJAX(commet AJAX),或使用相同的技術,我建議你如下:

  1. 一個Ajax調用獲取文件需要多少處理。
  2. 一個ajax調用基於索引處理文件。
0

如果你可以管理沒有得到「處理項目XX」,只是一個消息,說「處理項目」,您可以添加以下到您的AJAX調用相處:

if (xmlhttp.readyState==1) 
{ 
document.getElementById("notification").innerHTML="Processing items"; 
} 

readyState的= = 1將在通話記錄之前觸發。