我正在创建文件上传进度条。我有一个复制数据的CGI脚本,在这里我在一定的迭代后将进度条值增加1。我将增量值存储在XML文件中(我也尝试使用纯文本文件)。另一方面,我从xml中读取了ajax读取值,并根据它增加了DIV元素。
然而,这里发生的是,在我看来,虽然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 :(得分:0)
这里只是添加:text / xml文件中的数据在文件写入完成之前不可用(为进度条增量写入1到100个值)。 我的客户端包括Ajax工作正常只是问题 request.readyState == 4仅在所有数据写入文本文件后发生。 因此,我需要一种方法,可以通过ajax同时读取我的更新数据。
谢谢