我们公司有一个传感器网络,我要实现的功能是将传感器网络的实时拓扑图显示在Web上,采用apache+php+mysql实现。当某个节点入网的时候,数据库里面就会多一条父节点id和子节点id的一条记录(具体如何实现不是本问题的重点)。目前的情况是,我能根据数据库当前的记录能够画出一个简单的传感器网络拓扑图(通过php的jpgraph库实现),因为节点是动态加入或者退出的,所以我的拓扑图需要实时更新,而且不能刷新页面,我想通过ajax来实现。
 文件1:topology.php
<html>
<head>
<title>
节点拓扑展示
</title>
</head>
<body onload='setInterval("show()",1000)'><script type="text/javascript">
function show()
{
var xmlhttp;
if(window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById("topology").src=xmlhttp.responseText;
}
}
xmlhttp.open("GET","topology_2.php",true);
xmlhttp.send();
}
</script><img id="topology"/>
</body>
</html>文件2:topology_2.php
<?php
echo "topology_1.php";
?>文件3:topology_1.php(用于读数据库数据之后,画出拓扑图,读到不同的数据,画出的图形不一样)说明:1.由于jpgrah库好像只能支持<img src=...>的形式来显示图片,所以在文件1中会有img标签
      2.我的想法是定时去更新图片,所以使用了setInterval("show()",1000)这个函数,现在的问题是以上代码并不能在不刷新页面的情况下就更新图片。求高手解答,只要能解决问题,绝对给分~

解决方案 »

  1.   

    本帖最后由 xuzuning 于 2012-11-27 11:02:23 编辑
      

  2.   

    我用了echo “topology_1.php”.rand();貌似还是不行,我现在想的一个问题是,就算定时去执行show函数,给img的src重新赋值了,由于页面没有刷新,在当前显示的页面中,会不会再去执行一次topology_1.php。另外一个问题就是ajax真的可以实现这个功能吗?
      

  3.   

    刚才写错了,漏掉了问号,更正了下,用echo "topology_1.php".?.rand();结果图片返到显示不出来了,不知道什么原因,我之前对缓存不太了解。。
      

  4.   

    有个jquery-upload 的插件,建议你试试,这种需求,直接用第三方的就差不多了,没有必要自己折腾!费时费精力,还容易出问题!
    /**
     * AJAX Upload ( http://valums.com/ajax-upload/ ) 
     * Copyright (c) Andrew Valums
     * Licensed under the MIT license 
     */
      

  5.   

    如果我碰到类似问题,我会用google api 来制图,这样直接刷数据和图片的src 就可以了~
      

  6.   

    $.ajax,可以实现静态换图片啊,完全没有问题的。
      

  7.   

    刚才写错了,漏掉了问号,更正了下,用echo "topology_1.php".?.rand();结果图片返到显示不出来了,不知道什么原因,我之前对缓存不太了解。。
    这个应该是这样吧
    echo "topology_1.php?".rand();
      

  8.   

    搞不懂 直接写个接口 输出 图片地址 
    然后你前端用ajax定时去取接口中的图片地址 然后把图片地址赋给 那个src 不就行了吗
      

  9.   

    我这个图的src是没法得到的,因为不是现存的图片,是自己画的。你看我显示的图片是需要每次通过topology_1.php画的。