求救boa+ajax+cgi(c)解决方案

发布于 2022-10-15 06:28:40 字数 102 浏览 29 评论 0

想实现在网页中每隔两秒钟刷新一次温度值,而不去刷新整个网页,应该用怎样的方式去实现呀,用javascript定时触发XMLHttpRequest的onreadystatechange方法吗?求高手指点了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

将军与妓 2022-10-22 06:28:40

补充下,是不需要任何触发的定时刷新温度值

舞袖。长 2022-10-22 06:28:40

js里面有定时器

遥远的她 2022-10-22 06:28:40

ajax

就是 javascript+GET method

三寸金莲 2022-10-22 06:28:40

ajaxtest.html文件

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
  4. <title>Ajax + CGI Test</title>
  5. <script language="JavaScript" src="ajaxtest.js"></script>
  6. </head>
  7. <body>
  8. <h3>获取服务器当前温度</h3>
  9. <p>服务器当前温度 是:<div id="current_time"></div></p>
  10. <input type="button" value="获取" onclick="sender()"/>
  11. </body>
  12. </html>

复制代码ajaxtest.js文件

  1. var xmlhttp;
  2. /*
  3. *创建异步访问对象
  4. */
  5. function createXHR()
  6. {
  7.         var xhr;
  8.         try
  9.         {
  10.                 xhr = new ActiveXObject("Msxml2.XMLHTTP");
  11.         }
  12.         catch(e)
  13.         {
  14.                 try
  15.                 {
  16.                         xhr = new ActiveXObject("Microsoft.XMLHTTP");
  17.                 }
  18.                 catch(e2)
  19.                 {
  20.                         xhr = false;
  21.                 }
  22.         }
  23.         if(!xhr && typeof XMLHttpRequest !='undefined')
  24.         {
  25.                 xhr = new XMLHttpRequest();
  26.         }
  27.         return xhr;
  28. }
  29. /*
  30. *异步访问提交处理
  31. */
  32. function sender()
  33. {
  34.         xmlhttp = createXHR();
  35.         if(xmlhttp)
  36.         {
  37.                 xmlhttp.onreadystatechange=callbackFunction;
  38.                 /*test.cgi后面跟个cur_time参数是为了防止Ajax页面缓存*/
  39.                 xmlhttp.open("GET","ajaxtest.cgi?cur_time="+new Date().getTime(),true);
  40.                 xmlhttp.send(null);
  41.         }
  42.         else
  43.         {
  44.                 /*XMLHttpRequest对象创建失败*/
  45.                 alert("浏览器不支持,请更换浏览器!");
  46.         }
  47. }
  48. /*
  49. *异步回调函数处理
  50. */
  51. function callbackFunction()
  52. {
  53.         if(xmlhttp.readyState == 4)
  54.         {
  55.                 if(xmlhttp.status == 200)
  56.                 {
  57.                         var returnValue = xmlhttp.responseText;
  58.                         if(returnValue != null && returnValue.length > 0)
  59.                         {
  60.                                 document.getElementById("current_time").innerHTML = returnValue;
  61.                         }
  62.                         else
  63.                         {
  64.                                 alert("结果为空!");
  65.                         }
  66.                 }
  67.                 else
  68.                 {
  69.                         alert("页面出现异常!");
  70.                 }
  71.         }
  72. }

复制代码服务器上应该有ajaxtest.cgi程序更新温度并返回温度

以上html稍微修改下 放到定时器定时调用应该就可以

甜尕妞 2022-10-22 06:28:40

谢谢大家,正如5楼所说,在sender()中,加上setTimeout,每隔两秒调用它本身就可以实现了。

末骤雨初歇 2022-10-22 06:28:40

5楼大好人

兲鉂ぱ嘚淚 2022-10-22 06:28:40

回复 5# armips
您好 我也在做这个 是通过串口时时采集温度 然后想显示在网页上面 一下是我的串口程序,麻烦你看看能不能实现

  1. #include <time.h>
  2. #include <fcntl.h>
  3. #include <stdio.h>
  4. #include <ctype.h>
  5. #include <errno.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <unistd.h>
  9. #include <signal.h>
  10. #include <termio.h>
  11. #include <syslog.h>
  12. #include <pthread.h>
  13. #include <sys/ipc.h>
  14. #include <sys/msg.h>
  15. #include <sys/wait.h>
  16. #include <sys/stat.h>
  17. #include <sys/time.h>
  18. #include <semaphore.h>
  19. #include <arpa/inet.h>
  20. #include <sys/types.h>
  21. #include <sys/socket.h>
  22. #include <bits/signum.h>
  23. #include <sys/resource.h>
  24. int uart_init(int arg, int baud)
  25. {
  26.     int fd;
  27.     char port[20];
  28.     struct termios Opt;
  29.     int uartbiit[50]= {B115200,B9600,B19200,B4800,B2400,B1200};
  30.     sprintf(port,"/dev/ttySAC%d",arg);  
  31.     //printf("Use port: %s \n", port);
  32.     fd = open(port, O_RDWR);     //打开串口
  33.     if (fd<0)
  34.     {
  35.         return -1;                 //没有打开返回
  36.     }
  37.     tcgetattr(fd,&Opt);      //初始化
  38.     tcflush(fd,TCIFLUSH);
  39.     cfsetispeed(&Opt,uartbiit[baud]);    //设置波特率
  40.     cfsetospeed(&Opt,uartbiit[baud]);
  41.     Opt.c_cflag |= CS8;                          //设置数据位
  42.     Opt.c_cflag &= ~PARENB;
  43.     Opt.c_oflag &= ~(OPOST);
  44.     Opt.c_cflag &= ~CSTOPB;
  45.     Opt.c_lflag &= ~(ICANON|ISIG|ECHO|IEXTEN);
  46.     Opt.c_iflag &= ~(INPCK|BRKINT|ICRNL|ISTRIP|IXON);
  47.     Opt.c_cc[VMIN] = 64;            //最大长度
  48.     Opt.c_cc[VTIME] = 1;            //超时时间
  49.     if (tcsetattr(fd,TCSANOW,&Opt) != 0)       //装载初始化参数
  50.     {
  51.         perror("SetupSerial!\n");
  52.         close(fd);
  53.         return -1;
  54.     }
  55.     return(fd);
  56. }
  57. int main()
  58. {
  59.     int fd, len = 0, i=0;
  60.     char buf[64];
  61.     if((fd = uart_init(1, 0)) <0)   //打开串口,波特率为115200;
  62.     {
  63.         printf("Open uart err \n");
  64.         return -1;
  65.     }
  66.     sprintf(buf, "Hello world !\n");   //输出内容
  67.           while(1)
  68.           {
  69.              memset(buf, 0 ,sizeof(buf));
  70.        while((len = read(fd,buf,64))>0)
  71.                    {
  72.             printf("%s\n",buf);
  73.                     }
  74.           }
  75.     return 0;
  76. }

复制代码

最冷一天 2022-10-22 06:28:40

楼主当年搞定了吗?能不能把源码分享下?感谢!

掐死时间 2022-10-22 06:28:40

请问当年楼主解决了吗?能否把源码分享下,感谢!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文