Я создаю индикатор загрузки файла. У меня есть CGI-скрипт, который копирует данные, и здесь я увеличиваю значение индикатора выполнения на ОДИН после определенных итераций. Я храню увеличенное значение в XML-файле (я также пытался использовать обычный текстовый файл). С другой стороны, у меня есть ajax чтение увеличенного значения из xml и в зависимости от того, что оно увеличивает элемент 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, но тот же ответ)
Любой быстрый ответ был бы заметен.