我现在在c语言里知道我自己的升级进度,如何将该进度信息在网页中以进度条的形式显示出来
最好是用js获取我c中的进度信息。然后显示出来;就是c和js间等的数据交互的问题

解决方案 »

  1.   

    试看,
    思路,如果你的C中不断有当前进度进行输出,那可以在页面中不断调用JS函数读取该输出变量,然后调整进度条,
      

  2.   

    c我倒是不会,不过进度条的效果我这边收藏有一个,你可以参考下
    http://www.scriptlover.com/controls/SliderProgress/下载:http://www.scriptlover.com/agent/?url=/controls/SliderProgress.rar.gz
    http://www.scriptlover.com/controls/main.html
      

  3.   

    给你个思路
    1.C和JS通信 可以用XML来解决,这个就不详细讲了
    2.进度条,使用CSS百分比做,比如:<div id="warp" style="width:100px;height:10px;border:1px solid #eee;background:#000;overflow:hidden"><!--#warp用以包裹'进度'以及显示这个进度条-->
    <div id="point" style="width:90%;background:#44a;height:10px;"></div>
    <!--#point利用百分比控制实现和进度条一直的效果,后面需要的是利用JS做width的值的赋值操作-->
    </div>
      

  4.   


    问题是怎么用js读取c中的数据?我也是这那样做过,但我没办法读c中的数据,用文件的形式将c的进度信息写进txt中 然后用js读的时候,我的浏览器是Firefox的   不支持ActiveXObject。如果把进度写进数据库,我还不会用js去读,也就是现在没有个读c中数据的好办法
      

  5.   

    CGI? XMLHttpRequest不行吗?
      

  6.   


    进度条我都做了很多个   多种多样的,问题就是c和js的通信,我以前也没接触过js,html,xml。完全不懂,网上找了好久也没找到c和js间的通信,自己想用文件的形式通信都是浏览器不支持ActiveXObject。现在是彻底没办法了。
      

  7.   

    我本来只是做c语言的,刚毕业,在做嵌入式开发,公司要用网页实现控制设备,都是c写的代码,甚至连html都是用c一句一句写进去的,我现在唯一的就是在c中知道升级进度信息,然后随便用什么方法只要能在网页中显示进度信息就行,关键是我现在只会c,js和html也是最近做这个菜稍微了解,其他就不懂了。以下是我写网页html或js的部分代码
    websWrite(wp,T("<html>\n"));
      websWrite(wp,T("<head>\n"));
      websWrite(wp,T("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">\n"));
      websWrite(wp,T("<meta name=\"GENERATOR\" content=\"Microsoft FrontPage 4.0\">\n"));
      websWrite(wp,T("<meta name=\"ProgId\" content=\"FrontPage.Editor.Document\">\n"));
      websWrite(wp,T("<script language=\"JavaScript\" type=\"text/JavaScript\" src=\"/home/httpd/cgi-bin/myfreetemplates.js\"></script>\n"));
      websWrite(wp,T("<link href=\"/home/httpd/cgi-bin/myfreetemplates.css\" rel=\"stylesheet\" type=\"text/css\">\n"));
      websWrite(wp,T("</head>\n"));
      

  8.   

    感谢三楼的收藏,但我们公司只能上csdn,不过没有c的也不行,进度条效果我也做了很多,就是不知道这么和c间通信
      

  9.   

    C可以在服务器端生成个XML文件,客户端从中异步获取总时间,JS得到时间后,做个动画就OK
      

  10.   


      我试着做过,我设备里没有支持xml的头文件。最好能给出关键部分的源码;
      我原来这样做过:在windows下模拟可以读出进度信息,但移植到设备中就不支持ActiveXObject。
      我的设备的系统是linux的,服务器是goahead,脚本用的cgi,不知道为什么不支持ActiveXObject;
      我的模拟想法是用c做个线程写进度信息到txt文件中,用js再去读信息,显示出来:
    以下是代码:
    /***  test.c   ****/
    #include<stdio.h>#include<string.h>int main(){ FILE *fp; char str[8];
    int i=0;
    for(i=0;i<=100;i++)
    {
    if(i==99)
    {
    i=0;
    }
    memset(str,0,sizeof(str));
    sprintf(str,"%d",i);
    if((fp=fopen("12.txt","w"))==NULL)/*打开只写的文本文件*/
    {
    printf("can not open file!");
    return 0;
    }
    fputs(str,fp);/*写入串*/
    fclose(fp);/*关文件*/
    sleep(2);
    }
    }
    /****** jindu.html *******/
    <form name=loading>
      <p align=center> <font color="#0066ff" size="2" face="Arial">载入中,请稍等...
    <input type=text name=chart size=46 style="font-family:Arial; font-weight:bolder; color:#0066ff; background-color:#fef4d9; padding:0px; border-style:none;">
        <input type=text name=percent size=47 style="color:#0066ff; text-align:center;  border-style:none;">
    <script> 
    var bar=0 
    function readFile(filename){ 
    var fso = new ActiveXObject("Scripting.FileSystemObject"); 
    var f = fso.OpenTextFile(filename,1); 
    while (!f.AtEndOfStream)
    s = f.ReadLine();
    f.Close(); 
    var i=s;
     
    j=parseInt(i);
    return j;
    }
    count() 
    function count()

    bar=readFile('Z:/home/zhang/mytest/readwrite/12.txt'); 
    document.loading.percent.value=bar+"%" 
    if (bar<100) 
    {
    setTimeout("count()",300);

    //else 
    //{
    // window.location = "http://www.alixixi.com";
    //} 
    }
    </script>
      </p>
    </form>
    模拟成功,模拟时为了简单没做动画,但百分比完全正确!!
      

  11.   

       不知道哪位高手知道在我这样的设备上能用js读txt文件的方法
        我设备的芯片用的arm920t  系统好像是Linux2.6.10的,服务器移植的goahead,脚本解释器是cgi,上面jindu.html移植到设备中时报错的时候就在readFile的var fso = new ActiveXObject("Scripting.FileSystemObject");这一行,报错:Automation服务器不能创建对象。其他还有没有错我都不知道。
        我看了很多网上的说法都说ActiveXObject只与浏览器有关,我去Firefox浏览器模拟的时候确实不行,在windows下用IE浏览器模拟的时候正常,就是移植到我设备才出现:Automation服务器不能创建对象。
        我现在也搞不懂上面原因了,可能是服务器或是cgi的原因?
        高手出来指点一下
      

  12.   


    想了一下,应该可以这样做:
    1,首先C程序完成主要工作,同时不断地在某个地方输出完成的当前进度值并写进一个文件,这个文件可以保存在server上,以方便后面的client端函数访问,这个文件可以是 .txt(建议使用),或.xml或.html 文件,根据情况设定,文件内容可能就是一个很简单的当前进度值;2,在client端建立一个AJAX函数,函数里面读取放在server上的.txt文件的内容,根据返回值不断修改进度条,然后不断调用该函数读去.txt的内容,即可实现动态效果,AJAX的建立可不受ActiveXObject的限制,在MS ,FF IE应该都可以用;
    整个过程就用中间的 .txt文件把C和JS两个程序联系起来:C程序 ---(不断输出当前进度值,并写入文件)--->txtFile.txt--->(web页)JS程序读取.txt文件内容,显示进度
    |<..........................Server端......................>|<.........Client端.................>|
      

  13.   

         我今年刚刚电子专业毕业,对这个从来没接触过,不懂的,只学过c和Linux系统的一点东西。上面js在windows下用ActiveXObject读文件也是网上搜索了好久才做出来的,但在设备上不能用。
          你的想法和我一样,我就是在js中卡在ActiveXObject上读不出数据。
          高手能不能晒出一点AJAX函数读txt文件的代码参考?
      

  14.   

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    <script language="javascript">var bar=0;
    var line="||";
    var amount="||";
    function count()
    {
    bar=bar+2;
    amount=amount+line;
    document.loading.chart.value=amount;
    document.loading.percent.value=bar+"%";
    if(bar<=100)
    {
    setTimeout("count()",100);
    }else
    {
    window.location="success.html";
    }
    }
    </script>
    </head><body onload="count()">
    <form name="loading">
    <p>
    正在页面载入。请稍等
    <br />
    <input type="text" name="chart" size="46" style="font-family:Arial, Helvetica, sans-serif; font-weight:bolder; color:#666633; background-color:#ffffff; padding:0px; border-style:none;" />
    <br>
    <input type="text" name="percent" size="46" style="font-family:Arial, Helvetica, sans-serif; color:#0000FF; text-align:center; border-width:medium; border-style:none" />
    </form>
    </body>
    </html>
    代码也不怎么好啊!
      

  15.   

       我只是个非常菜的菜鸟,做了个多星期都不知道浏览器能检错,后来才发现浏览器一直在给我报错就是上面说的automation的错误,一个多星期才发现那个错误,后来公司对设备的要求,很久又没做了,现在又要做进度条,把旧问题拿出来,我还是只想出以文件的形式交互数据,想了几天,查了几天资料也没有上面进展,希望各位高手出来帮个忙,指条思路或是在我的思路上做出来都行。
       高手做出来将感激不尽,也当多学习了
      

  16.   

    看看这个高效率的AJAX函数...<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <style type="text/css">
    *{font-family:verdana; font-size:12px;}
    div{border:1px solid red; padding:2px;}
    </style>
    <script type="text/javascript">
    function $(id){
    return "string" == typeof(id) ? document.getElementById(id) : id ;
    }function createXMLHttp(){
    var xmlhttp;
    if(window.XMLHttpRequest){
    try{
    xmlhttp=new XMLHttpRequest();
    }catch(e1){}
    }
    if (!xmlhttp && window.ActiveXObject){   
    var activeXNameList=new Array("Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0",
    "Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP");
    for(var i=0;i<activeXNameList.length;i++){
    try{
    xmlhttp=new ActiveXObject(activeXNameList[i]);  
    }catch(e2){
    continue;

    if(xmlhttp) break;
    }
    }
    if(xmlhttp)
    return xmlhttp;
    else
    alert("Can not create XMLHttpRequest, maybe need to update your browser to new version.");
    }var objXMLHttp=null;function getInfo(){
    var goURL="http://www.xx.com/path/xFile.txt";    //根据你的情况设顶
    if(!objXMLHttp) objXMLHttp=createXMLHttp();
    objXMLHttp.open("GET",goURL,true);
    //objXMLHttp.onreadystatechange=CallBackFun;   //可以指定外部函数CallBackFun为返回处理函数
    objXMLHttp.onreadystatechange=function(){    //这里直接给出
    if(objXMLHttp.readyState==4){
    if(objXMLHttp.status==200){
    var r=objXMLHttp.responseText;
    $("revalue").innerHTML=r;
    alert("返回结果值: "+r);
    //...do something here....
    }
    }
    };
    objXMLHttp.send(null);
    }
    //你可能不断的条调用这个getInfo函数,如下:
    //var timer=setInterval("getInfo()",10);  
    </script>
    <body>
    <div id="revalue">&nbsp;</div>
    <a href="javascript:getInfo();">TEST Get Info </a>
    </body>
    </html>试看,...
      

  17.   

       点击TEST Get Info打印出我的文件中的数据?
       以下是我修改后的,修改的地方注释了,点击都一点反应也没有
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <style type="text/css">
    *{font-family:verdana; font-size:12px;}
    div{border:1px solid red; padding:2px;}
    </style>
    <script type="text/javascript">
    function $(id){
    return "string" == typeof(id) ? document.getElementById(id) : id ;
    }function createXMLHttp(){
    var xmlhttp;
    if(window.XMLHttpRequest){
        try{
            xmlhttp=new XMLHttpRequest();
            }catch(e1){}
        }
    if (!xmlhttp && window.ActiveXObject){   
        var activeXNameList=new Array("Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0",
        "Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP");
        for(var i=0;i<activeXNameList.length;i++){
            try{            
                xmlhttp=new ActiveXObject(activeXNameList[i]);                         
            }catch(e2){
                continue;
            } 
            if(xmlhttp) break;
        }
    }
    if(xmlhttp)
    return xmlhttp;
    else
    alert("Can not create XMLHttpRequest, maybe need to update your browser to new version.");
    }var objXMLHttp=null;function getInfo(){
    var goURL="Z:/home/zhang/mytest/readwrite/12.txt";    //我修改的地方,这是我上面贴出的用过可以读出数据的文件
    if(!objXMLHttp) objXMLHttp=createXMLHttp();
    objXMLHttp.open("GET",goURL,true);
    //objXMLHttp.onreadystatechange=CallBackFun;   //可以指定外部函数CallBackFun为返回处理函数
    objXMLHttp.onreadystatechange=function(){    //这里直接给出
            if(objXMLHttp.readyState==4){
                if(objXMLHttp.status==200){
                var r=objXMLHttp.responseText;
                $("revalue").innerHTML=r;
                alert("返回结果值: "+r);
                //...do something here....
                }
            }
        };
    objXMLHttp.send(null);
    }
    //你可能不断的条调用这个getInfo函数,如下:
    //var timer=setInterval("getInfo()",10);  
    </script>
    <body>
    <div id="revalue">&nbsp;</div>
    <a href="javascript:getInfo();">TEST Get Info </a>
    </body>
    </html>
      

  18.   

    <html xmlns="http://www.w3.org/1999/xhtml" ><head><title>标题页</title></head><body><table border="0" cellpadding="0" cellspacing="0">    <tr>        <td width="2" rowspan="2"></td>        <td width="2" height="2"></td>        <td height="2" bgcolor="#cccccc"></td>        <td width="2"></td>        <td width="2" rowspan="2"></td>    </tr>    <tr>        <td width="2" height="2" bgcolor="#cccccc"></td>        <td height="2"></td>        <td width="2" bgcolor="#cccccc"></td>    </tr>    <tr>        <td width="2" bgcolor="#cccccc"></td>        <td width="2" height="2"></td>        <td width="120 height="0"><marquee direction="right" scrollamount= "10"><table style="font-size:1px;width:50px;height:10px;"><tr><td bgcolor="#e5fee5"></td><td bgcolor="#cbcdaf"></td><td bgcolor= "#8abf9a"> </td></tr></table></marquee></td>        <td width="2" height="2"></td>        <td width="2" bgcolor="#cccccc"></td>    </tr>    <tr>        <td rowspan="2"></td>        <td height="2" bgcolor="#cccccc"></td>        <td height="2"></td>        <td bgcolor="#cccccc"></td>        <td rowspan="2"></td>    </tr>    <tr>        <td height="2"></td>        <td height="2" bgcolor="#cccccc"></td>        <td></td>    </tr></table></body></html>
      

  19.   

    我感觉你还是没有理解前面15L 我写的整个过程就用中间的 .txt文件把C和JS两个程序联系起来:C程序 ---(不断输出当前进度值,并写入文件)--->txtFile.txt--->(web页)JS程序读取.txt文件内容,显示进度
    |<..........................Server端......................>|<.........Client端.................>|红色部分是 server 端, 兰色部分是client端 , 这里你需要理解B/S模型工作方式var goURL="Z:/home/zhang/mytest/readwrite/12.txt"; //我修改的地方,这是我上面贴出的用过可以读出数据的文件你的12.txt文件应该放在 SERVER 端上,goURL 的值应该是 以http://形式为开始给出的URL
      

  20.   

    极端容易的问题,怎么搞这么多楼都没有解决吗?(后面的回复我就没功夫看了,不知有没有讲到的).
    1.C和JS的通讯
    这个只需要用C生成一个JS文件就可以了,内容如下:
    var 变量名称=数据值;
    这样就OK!! 然后在你要用的页面里,在<head></head>中<script id="脚本ID" src="那个js.js"></script>
    这样,你就把那个变量读进来了.在下面的JS里就可以直接使用那个 变量名称.2.至于不断更新同步数据.可以用定时器去更改脚本ID的src(页面禁止缓存,最好给JS加时间戳),也可以AJAX去读.
      

  21.   


    不好意思   那天下班了,我就在我的设备上随便读的一个盘上的文件 ,没做到设备的服务器上去,我知道你的意思,就是不知道为什么一定要放到服务器上去才能读出来,就随便创建的一个txt文件放在我的硬盘上的就读不出来?不都是读文件?
    我还很菜,不了解其中的原因,就在我的Windows下读了。
       上班去公司在server上读了试试
      

  22.   


    高手能不能给点代码,我三个星期前都没听过js和AJAX,
    比如我现在要读c语言的变量float Curprogress;
    我有个线程不断的对Curprogress写数据    ,请问你在js里怎么读出来,能用js的话最好用js,我这几个星期稍微才对js了解一点点,对AJAX根本不知道,
    简单的话,能不能给点代码,
      

  23.   

    代码??我的方法就是最适合你的,几乎没什么太多新概念,没什么你写不出来的代码.必要的代码,我其实都给你写出来了,你有没有认真看和想呢?
    用C写文件,会吧?打开,写入,关闭.只不过,你写的这个文件,起名成"A.JS",它的内容就象我已经给你写的代码:"var B=Curprogress的值;"
    这样就OK!! 然后在你要用的页面里,在<head></head>中<script id="脚本ID" src="A.js"></script>
    在页面下面的JS里就可以直接使用这个变量了.
    <script>alert(B);</script> 这就显示出你那个Curprogress了!既然你现在做网页开发,建议买本好书好好学学JS.或者,公司应该有专门的前台脚本工程师,这个任务应该让他也参与提供方法,你们之间找到彼此都易行的协作方式.否则,按你现在这样问所显示出来的状况,很不乐观.
      

  24.   

    仅仅对它写数据当然没用,读不了.要读,你就在这个线程里存成上面我说的JS,然后再后面那样,这是最简便的方法.
    除此之外,还可以写入服务器的SESSION中或者XML,或者数据库.但是通过C来写入与客户端对应的SESSION,和XML,都远没有上面那么简便.数据库的话,存取性能也要差些.
    所以,综合考虑,就是我说的了.
      

  25.   

    直接做个activex放页面里面吧。
      

  26.   

       我在线程里改变了Curprogress的值,并在js文件里显示是不断变化的值,可是我在网页中打开时只是显示刚打开网页时的值,甚至连刷新那个值也不会变化,必须关掉重新打开网页,值才变化。
       以前在windows下模拟的时候,用的ActiveXObject创建对象读.txt文件时,主动刷新还能读出数据,只是我的Linux系统或是Firefox浏览器不支持ActiveXObject。
      

  27.   


       还真是蛋疼的了,公司就我一个人做网页,都没其他人做了,而且这个项目做完我也不做网页了,就只是在网上找东西东拼西凑的,然后周末去看看html,革命开始不久,html还在了解中,项目就要近尾声了
      

  28.   

        楼上已经说了很多了,我的系统貌似不支持activex,运行到activex的时候总是automation的错误,我在windows下模拟用的就是activex,很不错。
       系统部支持,也没用的了。。
      

  29.   

    面对一个不知道ajax的同学真的很困难. lz加油. 
    用ajax请求发送到服务端, 服务端只需要传两个值(当前/最大经验), 剩下的在html上显示lz都会了吧.好, lz只需用会ajax, 就完全可以解决了. ajax发送一个请求到一个地方, 你用C在这个地方监听, 收到此消息即从你的C中返回那两个值. html显示就可以了
      

  30.   

    就像你说的 面对一个不知道ajax的同学真的很困难.
    ajax发送一个请求到一个地方, 这个地方怎么弄?你用C在这个地方监听,我怎么找到这个地方,要是两种语言能找到一个共同的地方我就实现数据交互了,ajax不懂 ,不知道怎么弄的。
      

  31.   

      我加到服务器上去了,错误也没提示,页面一点也没动,空页面,和原来一样,不管URL写成什么样,连页面都没了
      

  32.   


       控制样式颜色宽度百分比,那个简单啊,早出来了,上面已经贴了几个那样的代码,关键是那个百分比要能是我c语言中的百分比,怎么实现将c语言中的数据传到样式百分比中,那种颜色的我不需要都行,只要能显示各数字,变化的数字,与c语言中百分比同步变化的数字就ok