Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax从XML读取更新的值_Xml_Ajax - Fatal编程技术网

Ajax从XML读取更新的值

Ajax从XML读取更新的值,xml,ajax,Xml,Ajax,我正在创建文件上载进度条。我有一个复制数据的CGI脚本,在这里,我在某些迭代之后将进度条值增加1。我将递增的值存储在XML文件中,我也尝试使用纯文本文件。另一方面,我让ajax从xml读取递增的值,并根据该值递增DIV元素 然而,这里发生的事情是,在我看来,虽然ajax读取所有递增的值,但它在CGI完成执行后处理它。也就是说,一旦CGI中的文件复制和其他工作完成,进度条就会开始执行。我的代码是: AJAX:::: function polling_start() { //GETS CALL

我正在创建文件上载进度条。我有一个复制数据的CGI脚本,在这里,我在某些迭代之后将进度条值增加1。我将递增的值存储在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来写,但回答是一样的


任何快速响应都是值得注意的。

只需在此添加:在为进度条增量写入文件write complete1到100个值之前,文本/xml文件中的数据不可用。 我的客户端(包括Ajax)运行良好,唯一的问题是 request.readyState==4仅在将所有数据写入文本文件后发生。 因此,我需要一种方法,使我的更新数据可以被ajax同时读取


谢谢

每次向文件写入新状态时,请刷新并关闭该文件。您将在整个循环中保持打开状态。感谢您的响应…但是我也尝试了,但响应相同…我尝试了使用文本文件…尝试了fork…但到目前为止没有成功:-