Ajax для чтения обновленных значений из XML - PullRequest
1 голос
/ 26 мая 2010

Я создаю индикатор загрузки файла. У меня есть 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, но тот же ответ)

Любой быстрый ответ был бы заметен.

1 Ответ

0 голосов
/ 27 мая 2010

Просто добавьте сюда: данные в текстовом / xml-файле недоступны, пока не завершится запись в файл (значения от 1 до 100 записываются для приращения индикатора выполнения). Моя клиентская часть, включая Ajax, работает нормально, только проблема в том, что request.readyState == 4 происходит только после записи всех данных в текстовый файл. Поэтому мне нужен способ, чтобы мои обновленные данные могли быть прочитаны ajax одновременно.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...