5335|9

918

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

使用firebug来分析Enet_io例程中的XMLHttpRequest [复制链接]

上次发过一篇类似的帖子,但是说的比较长比较混乱。还是为菜鸟提供点参考。
以Enet_io中使用XMLHttpRequest的方法控制LED为例,只要会控制LED了,其它的外设使用相同的方法。限制你的将只是你对javaScript的掌握。
在io_http.htm中有这样一段Javascript代码.
function toggle_led()
{
var req = false;
var led = false;
        function ledComplete()
        {
        if(led.readyState == 4)
        {
        if(led.status == 200)
        {
        document.getElementById("ledstate").innerHTML = "<div>" + led.responseText + "</div>";
        }
        }
        }
//下面这一段的主要作用是创建2个XMLHttpRequest object。一个用来发送改变LED亮灭的的GET请求,一个用来发送获取LED状态的GET请求,这两个get几乎是同时发出的。所以在lwipopt.h中的选项:
#define MEMP_NUM_TCP_PCB  2   //这个选项至少要设置为2,为什么呢?
因为这个选项的意思是设置能够同时处于active状态的TCP连接数,如果你设置为1,你会发现,等亮了或灭了很长时间才能在网页上看到返回的状态变化。因为它要当第一个TCP由Active状态转到wait后,才能为第二个tcp连接进入到Active。
该数值每增1,大概需要多用160个字节的RAM,所以你需要根据自己设计的网页来适当调整该值的大小。在嵌入式web开发时,开发网页要严谨,否则你会后悔的。
              if(window.XMLHttpRequest)
              {
              req = new XMLHttpRequest();
              led = new XMLHttpRequest();
              }
              else if(window.ActiveXObject)   //兼顾低版本的IE浏览器。
              {
              req = new ActiveXObject("Microsoft.XMLHTTP");
              led = new ActiveXObject("Microsoft.XMLHTTP");
              }
                    
                  if(req)
                  {
                  req.open("GET", "/cgi-bin/toggle_led?id" + Math.random(), true);//发送一个get请求,目的是调用控制LED的函数,不需要返回信息。
                  req.send(null);
                  }
      if(led)
      {
      led.open("GET", "/ledstate?id=" + Math.random(), true);//发送一个get请求,目的是调用读取LED状态的函数,带有返回信息,ON或 OFF。这里设置为TRUE表示采用异步的方式。
      led.onreadystatechange = ledComplete;//当获得了返回信息之后,调用ledcomplete来把返回信息“悄悄地”写入到指定的位置。
      led.send(null);
      }
}
     我们知道浏览器要获取网页数据,就是采用的get方法后面的路径经过文件系统找到文件后返回来。
     那么通过网页控制LED灯的道理是一样的,只不过这个时候并不会去真正的读取网页数据文件,而是根据get后面的参数来判断去执行哪一个程序,比如这里点亮或熄灭LED。
     采用同样的方法获取了LED的状态。
      所以不要觉得很神秘,原理其实很简单。
      同时我们还可以使用Firefox的firebug插件来更好的观察出

     我们还可以使用firebug来对javaScript进行单步调试。
[ 本帖最后由 academic 于 2010-11-23 13:55 编辑 ]

最新回复

贵求LZ提供一下你学JAVAscript XML的书籍,谢谢。我最近想学习用JAVAscript XML编动态网页  详情 回复 发表于 2010-12-20 14:56
 
点赞 关注

回复
举报

155

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

不错

说明的不错,希望和你交流  61305608@163.com    我正在学习网页开发问题  CGI SSI   qq:523723198
 
个人签名http://www.tdhj.cn
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

板凳
 

回复 沙发 bjmonsoon 的帖子

谢谢。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 楼主 academic 的帖子

楼主,谢谢你,我现在已经熟练掌握了这种方式的网页控制了。
   现在有个问题想请教你,如果我想1s钟刷新显示页面,如,我想假如一个测量温度的功能,要如何做到1s钟刷新一次呢>>>??  期待楼主的答复
 
个人签名机遇总是给有准备的人呢
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

5
 

回复 4楼 flyingbing 的帖子

其实就只要在JavaScript中通过一个周期函数,周期性地调用另一个发送获取温度值的请求函数即可。

 t=setTimeout('gettemp()',500)// 上边是500ms,改成1000就是1s了。

过段时间,我把一些有关这方面小程序的工程传上来,现正在整理中。

 
 
 

回复

40

帖子

0

TA的资源

一粒金砂(中级)

6
 
楼主能不能写个文档把enet_io这个例程介绍一下,比如工程的流程,实现的功能,实现功能的方法等等一些
 
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

7
 

回复 6楼 lishengqiang 的帖子

好的,正有这个打算呢。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(中级)

8
 

原帖由 academic 于 2010-12-20 09:17 发表 好的,正有这个打算呢。

   

 
个人签名机遇总是给有准备的人呢
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

9
 
贵求LZ提供一下你学JAVAscript XML的书籍,谢谢。我最近想学习用JAVAscript XML编动态网页
 
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

10
 

回复 9楼 greedangel 的帖子

不好意思哦,我也没有系统地学过JavaScript和XML,只是在一些网站上学了一些基础的东西,用得上的就拿过来用。我也还在找这样的书,找到了提供给你。
可以访问w3school网站,学一些基础的东西。更深入的就慢慢去积累吧。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表