2010-05-26 49 views
1

我正在創建文件上傳進度條。我有一個複製數據的CGI腳本,在這裏,我在某些迭代之後將進度條值增加1。我將增加的值存儲在XML文件中(我也嘗試使用純文本文件)。另一方面,我有一個Ajax讀取從XML增加值,並根據它增加DIV元素。Ajax從XML讀取更新值

但是,這裏發生的是,在我看來,雖然ajax讀取所有遞增的值,但它在CGI完成執行後處理它。一旦文件複製和CGI中的其他內容完成,就是進度條開始執行。我的代碼是:

AJAX:::: 

function polling_start() { //GETS CALLED WHEN USER HITS FILE UPLOAD BUTTON 
     intervalID = window.setInterval(send_request,100); 
} 
window.onload = function(){ 
     request = initXMLHttpClient(); 
     request.overrideMimeType('text/xml'); 
     progress = document.getElementById('progress'); 
} 

function initXMLHttpClient() { 
     if (window.XMLHttpRequest){ 
     // code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp = new XMLHttpRequest(); 
     } 
     else{ 
     // code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
return xmlhttp 
} 

function send_request() 
{ 
request.open("GET","progress_bar.xml",true); 
request.onreadystatechange = request_handler; 
request.send(); 
} 

function request_handler() 
{ 
     if (request.readyState == 4 && request.status == 200) 
     { 
     var level=request.responseXML.getElementsByTagName('PROGRESS')[0].firstChild; 
     progress.style.width = progress.innerHTML = level.nodeValue + '%'; 
     progress.style.backgroundColor = "green"; 
     } 
} 

/*************ON SERVER SIDE********************/ 

     char xmlDat1[] = "<DOCUMENT><PROGRESS>"; 
     char xmlDat2[] = "</PROGRESS></DOCUMENT>"; 

fptr = fopen("progress_bar.xml", "w"); 

.........OTHER STUFF.............................. 
................................. 
       if(i == inc && j<=100) 
       { 
       fprintf(fptr, "%s\n", "<?xml version=\"1.0\"?>\n<!DOCTYPE DOCUMENT [\n<!ELEMENT DOCUMENT (PROGRESS)>\n<!ELEMENT PROGRESS (#PCDATA)>\n]>"); 
       //fprintf(fptr, "%s\n", "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"); 
       fprintf(fptr, "%s", xmlDat1); // 
       fprintf(fptr, "%d" ,j); 
       fprintf(fptr, "%s" ,xmlDat2); 
       fseek(fptr, 0, SEEK_SET); 
       /*fprintf(fptr, "%d" ,j); 
       fseek(fptr, 0, SEEK_SET);*/ 
       i = 0; 
       //sleep(1); 
       j++; 
       } 

(我也試過的.text寫,但相同的響應)

任何快速響應將是可觀的。

回答

0

只需在此添加:文件寫入完成後(1至100個值寫入進度條增量),text/xml文件中的數據不可用。 我的客戶端包括Ajax工作正常,只有問題是 request.readyState == 4只有在所有數據寫入文本文件後纔會發生。 因此,我需要一種方法,讓我的更新數據可以被ajax同時讀取。

謝謝

+0

每當你寫入新的狀態時沖洗並關閉文件。你在整個循環中都將它打開。 – 2010-05-27 00:11:50

+0

謝謝你的迴應....但我試過,但同樣的迴應......我嘗試使用文本文件.....嘗試叉().....但沒有成功,直到現在: - ( – Punit 2010-05-27 00:29:44